- Worksheet Object の Range プロパティで、アドレスや範囲名を直接指定する方法が最も一般的です。
Sub Range18()
MsgBox Sheet1.Range("D5").Address
MsgBox Sheet1.Range("D5:E7").Address
MsgBox Sheet1.Range("D5:E7,E9:F9").Address
Sheet1.Range("D5:D9").Name = "OSAKA"
MsgBox Sheet1.Range("OSAKA").Address
End Sub
- Range プロパティに 2 つの Range Object を指定すれば、それらを包括する矩形領域を指定できます。
Sub Range19()
Dim a As Range, b As Range
Set a = Sheet1.Range("D5")
Set b = Sheet1.Range("F9:F10")
MsgBox Sheet1.Range(a, b).Address
End Sub
上のコードは $D$5:$F$10 を返します。
- Range Object の Range プロパティは、対象領域の先頭セルを基点とした相対アドレス指定を可能にします。
Sub Range20()
MsgBox Sheet1.Range("D5:E7").Range("B1").Address
MsgBox Sheet1.Range("D5:E7").Range("F4").Address
End Sub
上のコードで、1行目は $E$5 を、2行目は $I$8 を返します。親の Range より広い範囲の指定も可能です。
- Range Object の Item プロパティは、対象領域の先頭セルを基点とした相対アドレス指定を可能にします。文字ではなく、( Row, Column ) という数値で指定するため、Range Object を配列のように扱えます。
Sub Range21()
MsgBox Sheet1.Range("D5:E7").Item(1, 2).Address
MsgBox Sheet1.Range("D5:E7").Item(4, 6).Address
MsgBox Sheet1.Range("D5:E7")(1, 2).Address
MsgBox Sheet1.Range("D5:E7")(4, 6).Address
End Sub
上のコードで、1行目は $E$5 を、2行目は $I$8 を返します。親の Range より広い範囲の指定も可能です。Item プロパティは Range Object の既定値なので、3行目や 4 行目のように省略して指定することもできます。引数には 1 を基点とした正の数を与えます。
- Range Object の Item プロパティに引数を 1 つだけ指定した場合、対象領域の矩形範囲を Column 方向を先に、順次舐めるようにセルを選択できます。領域のセル数を越える数値が指定されたときには、矩形領域がそのまま下方向に延長されたような動きをします。
Sub Range22()
Dim a As Range, b As Range
Set a = Sheet1.Range("D5:E6")
Set b = Sheet1.Range("D5,E6")
MsgBox a.Item(1).Address
MsgBox a.Item(3).Address
MsgBox a(5).Address
MsgBox b(5).Address
End Sub
上のコードで、1行目は $D$5 を、2行目は $D$6 を、3行目は $D$7 を返します。Set を使うことで、まるで配列変数のような簡単な記述が可能となります。変数 b のような複雑な領域の場合には、先頭の連続領域のみが対象となり、4行目は $D$9 を返します。
- Cells プロパティは、Worksheet Object や Range Object を Range Object に変換します。Range Object に対して指定した時には、同じ領域を返します。
Sub Range23()
MsgBox Sheet1.Cells.Address
MsgBox Sheet1.Range("D5:E7").Cells.Address
End Sub
1行目は、$1:$65536 を返し、2行目は $D$5:$E$7 を返します。 Range("D5:E7").Cells(1,2) といった表現を見ることがありますが、これは Cells ではなく Item プロパティの機能です。Item は既定値なので、省略して記述できますが、この正体は、Range("D5:E7").Cells.Item(1,2) です。 Range に Cells を続けても意味は無いので、Range("D5:E7").Item(1,2) としても同じです。
- Range Object の Offset プロパティは、対象領域を上下左右にずらした領域に変換します。引数 ( RowOffset, ColumnOffset ) には 0 を基点とした数を与え、マイナスも指定できます。
Sub Range24()
MsgBox Sheet1.Range("D5:E7").Offset(0, 1).Address
MsgBox Sheet1.Range("D5:E7").Offset(1, 0).Address
MsgBox Sheet1.Range("D5:E7").Offset(0, -1).Address
MsgBox Sheet1.Range("D5:E7").Offset(-1, 0).Address
End Sub
上のコードは順に、$E$5:$F$7 $D$6:$E$8 $C$5:$D$7 $D$4:$E$6 を返します。
- Range Object の Next プロパティと Previous プロパティは、対象領域の先頭セルの右隣および左隣のセルを返します。
Sub Range25()
MsgBox Sheet1.Range("D5:E7").Next.Address
MsgBox Sheet1.Range("D5:E7").Previous.Address
MsgBox Sheet1.Range("IV7").Next.Address
MsgBox Sheet1.Range("A5").Previous.Address
End Sub
1行目 2行目は、それぞれ $E$5 $C$5 を返し、3行目 4行目はエラーを返します。セルがワークシートの両端にある時は、それを越えるセルを返せないからです。