目次
アドレス
今回は、 Excel VBA の Address プロパティを使用したマクロを作成してみたいと思います。
Address プロパティは、セル範囲のアドレスを文字列として取得可能なようです。
引数によって返す結果が違ってくるので、引数を変化させながら結果を見てみたいと思います。
以下の画像のように、セル範囲を文字列として取得してみます。
マクロの一例
早速、以下のマクロを作成してみました。
A1 ~ A7 のセルに、そのセル自身のアドレスを出力するマクロになっています。
Sub Addressプロパティの引数による結果の違いを見てみるマクロ()
Range("A1").Value = Range("A1").Address
Range("A2").Value = Range("A2").Address(True, True)'引数 RowAbsolute, ColumnAbsolute に True を指定すると絶対参照の結果を返します。
Range("A3").Value = Range("A3").Address(False, False)
Range("A4").Value = Range("A4").Address(False, True)
Range("A5").Value = Range("A5").Address(True, False)
Range("A6").Value = Range("A6").Address(ReferenceStyle:=xlA1)
Range("A7").Value = Range("A7").Address(ReferenceStyle:=xlR1C1)'引数 ReferenceStyle に xlR1C1 を指定すると R1C1 形式のアドレスを返します。
End Sub
上のマクロの実行結果は以下の画像のようになりました。
引数 RowAbsolute , ColumnAbsolute , ReferenceStyle の組み合わせで出力結果に違いがありますね。
引数 RowAbsolute, ColumnAbsolute に True を指定すると相対参照ではなく、絶対参照の結果を返すようです。
引数 ReferenceStyle に xlR1C1 を指定すると R1C1 形式のアドレスを取得できるようです。
$A$1
$A$2
A3
$A4
A$5
$A$6
R7C1
RelativeTo 引数
次は、 RelativeTo 引数を使用したマクロを作成してみました。
RelativeTo 引数に指定されたセルから見た相対的なアドレスを取得してみます。
Sub Addressプロパティの引数RelativeToを使用したマクロ()
Range("A1").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("A1"))
Range("C1").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("C1"))
Range("E1").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("E1"))
Range("A3").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("A3"))
Range("C3").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("C3"))
Range("E3").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("E3"))
Range("A5").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("A5"))
Range("C5").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("C5"))
Range("E5").Value = Range("B2:D4").Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Range("E5"))
End Sub
上のマクロの実行結果は以下の画像のようになりました。
B2:D4 のセル範囲を上下左右、四隅、中心のセルから見た時の相対的なアドレスが出力されています。
R[1] C[1]:R[3] C[3] R[1] C[-1]:R[3] C[1] R[1] C[-3]:R[3] C[-1]
R[-1]C[1]:R[1] C[3] R[-1]C[-1]:R[1] C[1] R[-1]C[-3]:R[1] C[-1]
R[-3]C[1]:R[-1]C[3] R[-3]C[-1]:R[-1]C[1] R[-3]C[-3]:R[-1]C[-1]
A1 セルから B2:D4 のセル範囲を見た場合、 B2 セルは 1 行下の、 1 列右で R[1]C[1] 、 D4 セルは 3 行下の 3 列右なので R[3] C[3] となるようです。
あとがき
私の場合は、ドルマーク($)の付いていない相対参照の形式でセル範囲を取得している事が多い気がします。
何の用途でかと思い返してみても、なぜか思い出せませんが、時々使用しています。
以上閲覧ありがとうございました。