目次

アドレス

今回は、 Excel VBA の Address プロパティを使用したマクロを作成してみたいと思います。

Address プロパティは、セル範囲のアドレスを文字列として取得可能なようです。

引数によって返す結果が違ってくるので、引数を変化させながら結果を見てみたいと思います。

以下の画像のように、セル範囲を文字列として取得してみます。

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 のセル範囲を上下左右、四隅、中心のセルから見た時の相対的なアドレスが出力されています。

周囲のセルから見た場合の B2:D4 の範囲指定です。 R1C1 形式になっています。
周囲のセルから見た場合の B2:D4 の範囲指定です。 R1C1 形式になっています。
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] となるようです。

目次まで戻る

あとがき

私の場合は、ドルマーク($)の付いていない相対参照の形式でセル範囲を取得している事が多い気がします。

何の用途でかと思い返してみても、なぜか思い出せませんが、時々使用しています。

以上閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿