RangeとCellsによるセルの参照

エクセルのシートでVBAマクロを実行できるようになったら、次はシートの各セルにVBAからアクセスしてみましょう。VBAから(現在の)シート上の各セルにアクセスするには、セル(セル単体、またはセル集合)を保持するRangeオブジェクトを使います。

Rangeオブジェクトには、セルの状態を取得したり設定するための機能が多数用意されていて、その内の一つValueプロパティでセルの内容にアクセスできるのです。試しに、エクセルを起動しA1セルに適当な内容を入れてから、以下のVBAマクロを実行してみてください。

Sub test1()
  MsgBox Range("A1").Value
End Sub

実行すると、A1の内容がダイアログで表示されましたね。Range()は、指定の範囲を保持するRangeオブジェクトを返す関数です。A1、A2などという形で一つのセルの名前を渡すと、そのセルをあらわすRangeオブジェクトが返されます。そして、返されたRangeのValueプロパティを参照すれば、そのセルの値が取得できるわけです。

Valueプロパティは、値を取得するだけでなく、設定することもできます。今度は、以下のVBAマクロを実行してみてください。

Sub test1()
  Range("A2").Value = "A2 test"
End Sub

A2セルに、文字列が入りましたね。

セルの指定には、Rangeの他にCells()を使うこともできます。こちらは、Cells(行, 列)と数値で位置を指定すると指定セルのRangeが得られる、というもので、たとえば

Sub test1()
  Cells(3, 2).Value = "B3 test"
End Sub

とすると、B3セルに文字列が設定されます。Cells()による指定は、数値で行うためVBAのようなプログラミング言語ではこちらを使う機会も多いでしょう。


エクセルVBA練習帳