LoginSignup
0
1

More than 5 years have passed since last update.

# VBA でセル位置をどう扱うか

Last updated at Posted at 2018-02-23
1 / 38

このスライドは...

シート編集の後には必ず VBA の手直しをしていたような効率の悪い VBA コードを撲滅する目的で用意しました、今後の参考になれば幸いです。


セル式 と VBA の間には...


深くて暗い川があります...


それはセル位置の...


扱い!


セル式さんは...


セル式中のセル位置を...


アドレス名で指定する!


C1セル =A1 + B1


シート編集で...


位置がずれても...


問題ない!


VBA さんは...


アドレス名を...


文字列で指定する!


Range("C1") =
Range("A1") + Range("B2")


または...


座標位置を指定する!


Cells(1, 3) =
Cells(1, 1) + Cells(1, 2)


シート編集で...


位置がずれても...


Excel さんは...


変えません!


だから...


行を増やしました
(⋈◍>◡<◍)。✧♡


何故か動きません!
( ゚д゚)ポカーン


直してください!
(´・ω`・)エッ?


ならばどうするか?


VBA に扱うセルをどう教える?

  1. セルを教えてあげる
  2. 範囲名で教えてあげる
  3. ボタン位置で教えてあげる

1. セルを教えてあげる

関数を作りセルを渡す =UserFunc(A1, B1)

' VBA
Function UserFunc(lhs, rhs)
    UserFunc = lhs.Value + rhs.Value
End Function

2. 範囲名で教えてあげる

A1 を 左値 B1 を 右値 C1 を 答え と名前を付ける

Range("答え") = Range("左値") + Range("右値")

3. ボタン位置で教えてあげる

押したボタン位置から相対位置で判断する

With ActiveSheet
    Set o = .Buttons(Application.Caller)
    r = o.TopLeftCell.row
    c = o.TopLeftCell.Column
End With
Cells(r, c-1) = Cells(r, c-3) + Cells(r, c-2)

こんなのが辛い...


辛い...

式は探すの大変なの

    For i=1 To 100
        Range("A:" & i) = i
    Next i

辛い...

座標も探すの大変なの

    For i=1 To 100
        Cells(i, 1) = i
    Next i

Range.Offset を使ってね

検索出来る目視も楽

    Set p = Range("範囲名")
    For i=0 To 99
        p.Offset(i, 0) = i
    Next i

おしまい

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1