Addressプロパティ
Addressプロパティは、Rangeオブジェクトのプロパティとして使用します。
指定したRangeオブジェクトのセル範囲のシート上の行列のアドレスを取得します。
5つの引数は全て省略可能です。
構文
Rangeオブジェクト.Address([RowAbsolute], [ColumnAbsolute], [ReferenceStyle], [External], [RelativeTo])
Addressプロパティを使用するには取得対象のセル範囲を指定しなければなりません。
また、取得するアドレスの形式を引数で指定することが可能です。引数未指定の場合は「$A$1」のように$と行と列が組み合わさった形式でアドレスが取得できます。
親オブジェクト | セル範囲を示すRangeオブジェクトを親オブジェクトとして指定します。
単一セル、複数セル範囲のどちらでも指定可能です。省略できません。 |
RowAbsolute (省略可能) |
行アドレスの取得を絶対参照か相対参照かのどちらなのかを指定します。
Trueまたは省略時は絶対参照で、Falseの場合は相対参照です。 |
ColumnAbsolute (省略可能) |
列アドレスの取得を絶対参照か相対参照かのどちらなのかを指定します。
Trueまたは省略時は絶対参照で、Falseの場合は相対参照です。 |
ReferenceStyle (省略可能) |
シートの列の形式を指定します。XlReferenceStyle列挙型の定数を使用します。
xlA1または省略時はA1形式(列が英字)で、xlR1C1の場合はR1C1形式(列が数字)になります。 |
External (省略可能) |
アドレスの取得形式を指定します。
Trueの場合は外部参照形式([Book1]Sheet1!$A$1形式)で、Falseまたは省略時はローカル参照($A$1形式)になります。 |
RelativeTo (省略可能) |
相対参照時の基準セルをRangeオブジェクトで指定します。
引数のRowAbsoluteがFalse、ColumnAbsoluteがFalse、ReferenceStyleがxlR1C1の場合にのみ利用可能です。 |
サンプルコード
以下のコードはAddressプロパティの各引数を設定した場合にどのようにアドレスが取得できるのかのサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Sub AddressTest() Dim r As Range Set r = Range("C15") Debug.Print "単一セル" Debug.Print r.Address Debug.Print r.Address(RowAbsolute:=False) Debug.Print r.Address(ColumnAbsolute:=False) Debug.Print r.Address(False, False) Debug.Print r.Address(ReferenceStyle:=xlR1C1) Debug.Print r.Address(External:=True) Debug.Print r.Address(False, False, xlR1C1, False, Range("D3")) Debug.Print r.Address(False, False, xlR1C1, False, Cells(3, 4)) Set r = Range("B12:C15") Debug.Print Debug.Print "複数セル範囲" Debug.Print r.Address Debug.Print r.Address(RowAbsolute:=False) Debug.Print r.Address(ColumnAbsolute:=False) Debug.Print r.Address(False, False) Debug.Print r.Address(ReferenceStyle:=xlR1C1) Debug.Print r.Address(External:=True) Debug.Print r.Address(False, False, xlR1C1, False, Range("D3")) Debug.Print r.Address(False, False, xlR1C1, False, Cells(3, 4)) End Sub |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
単一セル $C$15 $C15 C$15 C15 R15C3 [Book1.xlsx]Sheet4!$C$15 R[12]C[-1] R[12]C[-1] 複数セル範囲 $B$12:$C$15 $B12:$C15 B$12:C$15 B12:C15 R12C2:R15C3 [Book1.xlsx]Sheet4!$B$12:$C$15 R[9]C[-2]:R[12]C[-1] R[9]C[-2]:R[12]C[-1] |
A1形式とR1C1形式での注意点
個人的にですが、私がアドレスを取得する際はほとんどの場合、A1形式で取得します。理由はR1C1形式の表記方法は角括弧が含まれており使い勝手が悪いためです。
あと、R1C1形式はA1形式と行と列の表記が逆なのも使い勝手が悪いです。
A1形式の場合は、列→行、の順に表記されますが、R1C1形式は逆で、行→列、の順に表記されます。
R1C1形式は、Row→Column形式の略でRとCと思われますので意味は覚えやすいのですが、A1形式と同様に、列→行、に統一して、C1R1形式、としてほしかったなあ、と思います。
実際にVBAでコードを書く場合、行と列それぞれのループ処理があったりしますが、A1形式とR1C1形式では考え方が逆になり、バグの原因になりかねません。
そういう理由で、私はA1形式を使うことが多いです。