セル操作/Excelマクロ基礎

何しろ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の範囲が選択状態となる

activate1

これだけならActivateもSelect違いはないが、上記の構文で範囲指定した後、下記を追記して実行してみると

Sub test()

Range(“A1:D4”).Activate

Range(“B3”).Activate

End Sub

activate2

しかしSelectだと

Sub test()

Range(“A1:D4”).Activate

Range(“B3”).Select

End Sub

activate3
最初の選択範囲は解除されて、B3セルだけが選択状態となりました。

つまりActivateの特徴として、選択範囲内であれば選択をそのままの状態で保ち、アクティブセルだけを選べる

それではこんなことをやってみよう

A1からD4までを選択した後に、範囲外のF6セルをアクティブにしてみるとどうなるか

Sub test()

Range(“A1:D4”).Activate

Range(“F6”).Activate

End Sub

activate4
今度は選択範囲は解除され、F6だけが選択状態になりました

やはり、選択範囲内でないとダメですね

結論

セルを範囲指定して選択した後、先頭セル以外の範囲内セルをアクティブ化したいときにActivateの特徴が活かせる

また、範囲選択されている状態をリセットして、範囲内のセルを選択したい場合は、Selectの特徴が活かせる

ってな事になるかな

他にもセル操作のメソッドやプロパティがたくさんあるので、別の記事で紹介します。osamushi

コメント