
ExcelVBAにおいて、セル単位で操作をするケースが非常に多いです。
その場合、先日解説したRangeプロパティが代表的ですが、単一セルを指定するプロパティは他にもあります。
【Excel VBA】単一セルやセル範囲を参照するRangeプロパティまとめ | Excelを制する者は人生を制す ~No Excel No Life~
それは、行と列をそれぞれ番号を指定してセルを参照するCellsプロパティです。
Rangeプロパティと違って複数のセルをいっしょに参照することはできませんが、単一セルを操作する際はコードが簡潔でわかりやすくなるので、なるべくCellsプロパティを使用した方が良いです。
よって、Excel VBAではRangeプロパティと並んで基本的なプロパティだといえます。
今回はCellsプロパティで行と列を別々に指定してセルを参照する方法についてまとめていきます。
Cellsプロパティの基本構文
オブジェクト.Cells(行,列)
オブジェクト
Cellsプロパティを指定するオブジェクトを指定します。
この部分は省略可能です。
省略すると、アクティブブックのアクティブシートを指定していることになります。(マクロを実行したときに開いているもの)
逆に指定してあげるケースは、マクロを実行した際の画面と違うブックやシートに対して操作を行いたいというときになります。
オブジェクトに関しては下記記事をご参照ください。
Excelのオブジェクトの基礎知識まとめ | Excelを制する者は人生を制す ~No Excel No Life~
行
Cellsプロパティで参照したい行番号を整数で指定します。
たとえば、A5セルを指定したい場合は5行目のため、「5」を指定してあげるということになります。
列
Cellsプロパティで参照したい列番号を整数で指定します。
たとえば、A5セルを指定したい場合は1列目のため、「1」を指定してあげるということになります。
もしくは”A”のように””[ダブルクォーテーション]で指定列のアルファベットを指定してあげてもOKです。
引数である「行,列」部分を省略すると指定ワークシートのすべてのセルを参照します。
使用例①【行・列ともに数字で指定】
もっともオーソドックスな使用例として行・列ともに数字で指定してあげます。
使用例としてSelectメソッド(対象オブジェクトを選択)を使用しています。(以後の使用例と共通)
1 2 3 |
Sub 単一セル選択①() Cells(3, 3).Select End Sub |
マクロの動作イメージ
C3セルが選択されました。
使用例②【列をアルファベットで指定】
こちらは使用例①の列部分をアルファベットで指定します。指定列のアルファベットを””[ダブルクォーテーション]で囲ってあげます。
1 2 3 |
Sub 単一セル選択②() Cells(3, "C").Select End Sub |
マクロの動作イメージ
C3セルが選択されました。
使用例③【セル参照】
あまり美しいコードではありませんが、ワークシート上に入力している数字や文字列もRangeプロパティ上で参照することが可能です。
今回はB2セルに入っている「1」を列番号に組み込みたいとします。
その場合、Cellsプロパティ内の列部分に「Range(“B2”)」とRangeプロパティを入れてあげるとB2セルの「1」の値を参照することが可能になります。
1 2 3 |
Sub セル参照() Cells(1, Range("B2")).Select End Sub |
マクロの動作イメージ
A1セルが選択されました。
使用例④【変数参照】
同じプロシージャ内で設定している変数もCellsプロパティの一部として使用可能です。
今回は変数iが「3」を示しており、列番号として指定したいとします。
その場合、Cellsプロパティ内に列の部分に変数「i」を入れてあげます。
先ほどの使用例③よりもコードが簡潔であるため、あらかじめセルの値を参照したい場合は変数に格納してから行なうと良いですね。
1 2 3 4 5 |
Sub 変数参照() Dim i As Integer i = 3 Cells(4, i).Select End Sub |
マクロの動作イメージ
C4セルが選択されました。
まとめ
Cellsプロパティは特に変数を用いて単一セルをループで処理をする場合などに使用すると効果的です。
Rangeプロパティと行列の順番が逆になることさえ注意すればさほど難しくはないですし(・∀・)
職場でマクロ付きのブックがあれば、必ず使われているはずなのでVBEの中身を見てどのような使われ方をしているかを読んでみると勉強になりますよ。