はじめに
Excel VBA マクロを作成するときに、シート上のセル範囲について操作することも多いかと思います。
VBA においてはセル範囲は Range オブジェクトとして扱います。
ここでは Range オブジェクトの扱い方について説明します。
VBA でのセル範囲の指定方法
以下のようなシートがあったとします。
このシート上の表に該当するセル範囲(B3~D5 の範囲)を VBA 上で表現すると以下のようになります。
ActiveSheet.Range("B3:D5")
'または
ActiveSheet.Range(Cells(3, 2), Cells(5, 4))
一般的な定義で言うと以下のようになります。
セル範囲の指定方法
<対象シート>.Range("<対象範囲の左上セル>:<対象範囲の右下セル>")
- ※この場合のセルの指定形式は
<アルファベット><数字>
- ※この場合のセルの指定形式は
または
<対象シート>.Range(<対象範囲の左上セル>,<対象範囲の右下セル>)
- ※この場合のセルの指定形式は
Cells(<行>,<列>)
- ※この場合のセルの指定形式は
セル範囲(Range オブジェクト)を変数に格納する
Range オブジェクトは Range オブジェクト型の変数に格納することができます。
定義の構文は以下の通りです。
Range オブジェクト変数の定義
Dim <変数名> As Range
また、Range オブジェクトは単なる値ではなくプロパティを持ったオブジェクトという分類になります。
オブジェクトを変数へ格納する場合は、以下のように行頭に Set を付けます。
Range オブジェクト変数へのオブジェクトの格納
Set <変数名> = <オブジェクト>
例えば以下のように Range オブジェクト変数を定義し、変数に Range オブジェクトを格納します。
Sub main()
Dim ra As Range
Set ra = ActiveSheet.Range("B3:D5")
End Sub
Range オブジェクト内の各セルの値を取得する
Range オブジェクトの中の各セルの値の取得をしたい場合があると思います。
以下のように記述することで、Range オブジェクト内の指定セルの値を取得することができます。
Range オブジェクト内のセルの値の取得
<Range オブジェクト>.Cells(<行位置>,<列位置>).Value
※行位置、列位置は Range オブジェクト内での左上セルを 1 行 1 列とした場合の位置です
例えば、以下のシートの B3~D5 の範囲に対応する Range オブジェクトを考えます。
Range オブジェクト内のセルを指定する際の Cells(<行位置>,<列位置>) は以下のようになります。
上のシートを対象として以下のマクロを実行して、実際にどの値が取得できるかを確認してみます。
Option Explicit
Sub main()
Dim ra As Range
Dim i%, j%, cell_value$
Set ra = ActiveSheet.Range("B3:D5")
For i = 1 To 3
For j = 1 To 3
cell_value = ra.Cells(i, j).Value
Debug.Print "ra.Cells(" & i & "," & j & ").Value = " & cell_value
Next
Next
End Sub
以下のような結果となり、想定通りの結果となっていることが分かります。
Range オブジェクト内のセルの値を変更する
Range オブジェクトの中の各セルの値を変更したい場合があると思います。
以下のように記述することで、Range オブジェクト内の指定セルの値を変更することができます。
Range オブジェクト内のセルの値の変更
<Range オブジェクト>.Cells(<行位置>,<列位置>).Value = <変更後の値>
※行位置、列位置は Range オブジェクト内での左上セルを 1 行 1 列とした場合の位置です
例えば、以下のシートがあったとします。
このシートの表になっている B3~D5 セルの範囲に Range オブジェクトを使って値を入力してみます。
サンプルのコードは以下の通りです。
Option Explicit
Sub main()
Dim ra As Range
Set ra = ActiveSheet.Range("B3:D5")
ra.Cells(1, 1).Value = 11
ra.Cells(1, 2).Value = 12
ra.Cells(1, 3).Value = 13
ra.Cells(2, 1).Value = 21
ra.Cells(2, 2).Value = 22
ra.Cells(2, 3).Value = 23
ra.Cells(3, 1).Value = 31
ra.Cells(3, 2).Value = 32
ra.Cells(3, 3).Value = 33
End Sub
このマクロを実行すると以下のように表内に値が入力されます。