VBAのRangeとCellsは基本的には同じ挙動をします。用意されているVBAのメソッドやプロパティもほとんど同じです。しかしRangeとCellsの2つが用意されているのは、Rangeが分かりやすいからです。しかし中級者以上になると不便なところもあり、それはCellsの記事に記載されています。
目次
Rangeでセルの取得を実装する
言葉の問題ですが、VBAでセルの取得。ということはセルに入力されているデータを取得するのではなく、データを含めた表示形式や罫線などのセルに関するすべてのデータを取得するということです。
何やら大変なものだと思いますが、実はそのセルのRangeオブジェクトに全て情報は詰め込まれているのです。
1.Rangeプロパティとは
Rangeプロパティには2種類の使い方があります。それはRange(arg)とRange(Cell1, Cell2)という使い方です。argはVBAではなく、ワークシート関数で使う「A1」といった文字列型で指定します。Range(Cell1, Cell2)と言うのはCell1からCell2までの長方形範囲をVBAのRangeオブジェクトで取得します。
Sub sumple()
Range(“C5”).Select
MsgBox “次のセル範囲を選択します”
Range(“$B$2:$E$5”).Select
End Sub
※MsgBoxは見やすいように入れています。
サンプルコードのように絶対参照を表す、「$」マークはあってもなくても正常に動作します。
直感的で、とても分かりやすいVBAのコードになります。
2.Cellsプロパティとの連携
しかしRangeプロパティはForステートメントとの相性がよくありません。
Forステートメントと相性がいいのはCellsプロパティです。
そんないいとこどりをするのが以下です。
Sub sumple()
Dim i As Integer
For i = 1 To 10
Range(Cells(1, 1), Cells(i, i)).Select
MsgBox “選択範囲を広げます”
Next i
End Sub
Range(Cells(1, 1), Cells(i, i)).Select
MsgBox “選択範囲を広げます”
Next i
End Sub
MsgBoxを閉じるたびに選択範囲が広がっていくサンプルプログラムです。
もちろんCells(1,1)のところをRange(“A1”)と変えても問題ありません。どちらもA1のRangeオブジェクトを返すからです。
3.イミディエイトウィンドウの利用
イミディエイトウィンドウはとても便利で、その便利な利用法の1つが「選択範囲のセルアドレス取得」です。実は章1で利用した「$B$2:$E$5」もイミディエイトウィンドウで取得したものです。
選択した後、イミディエイトウィンドウで
「Selection.Address」
と打ち込みます。
この様に簡単にセルアドレスを取得することが出来ます。
イミディエイトウィンドウは特別にマクロを書かなくても「一行だけ」マクロを実行できる、とても便利なウィンドウなのです。
今回はRangeプロパティについて解説しました。
後半のイミディエイトウィンドウの利用はとても気に入っているVBAの機能なんです。
実はこのイミディエイトウィンドウのような機能が付いているプログラミング開発ソフトってほとんど無いんです。
イミディエイトウィンドウを使って便利に開発を進めてしまいましょう!