何しろExcelを使うという事は「セルを操作する」ことに尽きると思う
なのでVBAでもここが基本となる
セルを表すには2つの方法がある
まずはRangeでA2セルを指定してみよう
Range(“A2”)
そしてCells
Cells(2, 1)
行と列の順番が逆になる
なぜこんなわかり辛くしたのかわかんないけど、VBAでもExcelのシート関数でも、「セルを数字で表す時には、行番号が先に来る」と覚えておいてほしい
逆にアルファベットを使うときは、列番号が先である。つまりA2のように。。
行番号とは縦の順番で、上から下に数えたセルの数である(そんな説明要らない?)
範囲指定もできる
Rangeの場合
Range(“A2:B3”) ‘A2からB3
しかしCellsを使う場合は。。
Range(Cells(2, 1), Cells(3, 2))
これならRangeを使った方が良いよね
でもこんなこともある
For kaisu 1 To 3 ‘1から3までカウントアップしながら繰り返す
Range(“A” & kaisu).Activate ‘指定セルを選択
Next kaisu ‘繰り返しここまで
※kaisuという任意の変数に1から3までの数字が代入される
これをCellsで表現すると
For kaisu 1 To 3
Cells(kaisu, 1).Activate
Next kaisu
指定セルをアクティブ(つまり選択する)にするマクロだが、この場合はCellsを使った方が短くて済む
RangeとCellsを混在することもできるので、自分だけが触るマクロなら、利便性を考えて混在させても良いかもしれない
ただし、プログラムが見づらくなるので、混在させるなら何かルールを作った方が良いかもね
単純に「範囲指定をする場合はRange、それ以外はCells」とかね
セルに対するメソッドとプロパティを紹介しよう(Rangeで表記します)
◆ActivateSub testRange() ‘testRangeは任意に付けたマクロ名です
Range(“A1:D4”).Activate ‘A1~D4セルをアクティブ
End Sub
◆Selecte
Sub testCells() ‘testCellsは任意に付けたマクロ名です
Range(“A1:D4”).Select ‘A1~D4セルを選択
End Sub
1つのセルでも範囲指定をした場合でもActivateもSelectも同じ結果で、両者ともA1セルがアクティブとなり、A1からD4の範囲が選択状態となる
これだけならActivateもSelect違いはないが、上記の構文で範囲指定した後、下記を追記して実行してみると
Sub test()
Range(“A1:D4”).Activate
Range(“B3”).Activate
End Sub
しかしSelectだと
Sub test()
Range(“A1:D4”).Activate
Range(“B3”).Select
End Sub
最初の選択範囲は解除されて、B3セルだけが選択状態となりました。
つまりActivateの特徴として、選択範囲内であれば選択をそのままの状態で保ち、アクティブセルだけを選べる
それではこんなことをやってみよう
A1からD4までを選択した後に、範囲外のF6セルをアクティブにしてみるとどうなるか
Sub test()
Range(“A1:D4”).Activate
Range(“F6”).Activate
End Sub
やはり、選択範囲内でないとダメですね
結論
セルを範囲指定して選択した後、先頭セル以外の範囲内セルをアクティブ化したいときにActivateの特徴が活かせる
また、範囲選択されている状態をリセットして、範囲内のセルを選択したい場合は、Selectの特徴が活かせる
ってな事になるかな
他にもセル操作のメソッドやプロパティがたくさんあるので、別の記事で紹介します。osamushi