1. はじめに
Excel VBA において Range
オブジェクトは、セルやセル範囲を操作するための非常に重要なオブジェクトです。その中でも、セルの位置情報(アドレス)を文字列で取得できる Address
プロパティは、プログラム内で位置情報を制御・出力する際に欠かせない機能です。
例えば、「A1」や「B2:C5」などのセル参照文字列を得ることができ、ログ出力、条件処理、セル範囲の記憶などに使われます。
2. 基本構文
RangeObject.Address([RowAbsolute], [ColumnAbsolute], [ReferenceStyle], [External], [RelativeTo])
戻り値:
セルアドレスを表す 文字列(String)
3. 引数の詳細
引数名 | 省略可 | 説明 |
---|---|---|
RowAbsolute | ○ | 行番号を絶対参照にする(True:$A$1 、False:A1 ) |
ColumnAbsolute | ○ | 列記号を絶対参照にする(True:$A$1 、False:A1 ) |
ReferenceStyle | ○ | 参照スタイル:A1形式(xlA1)またはR1C1形式(xlR1C1) |
External | ○ | 外部参照形式(ブック名を含めるか) |
RelativeTo | ○ | 相対参照の場合の基準セルを指定 |
4. 基本的な使い方
4-1. 単一セルのアドレスを取得
Sub Sample1()
MsgBox Range("B2").Address
End Sub
出力例:$B$2
※ 既定では 絶対参照形式($)付きのA1スタイル になります。
4-2. 絶対/相対参照の切り替え
Sub Sample2()
Dim rng As Range
Set rng = Range("C3")
Debug.Print rng.Address(True, True) ' → $C$3
Debug.Print rng.Address(False, True) ' → C$3
Debug.Print rng.Address(True, False) ' → $C3
Debug.Print rng.Address(False, False) ' → C3
End Sub
4-3. 複数セルのアドレスを取得
Sub Sample3()
Dim rng As Range
Set rng = Range("D2:F4")
MsgBox rng.Address ' → $D$2:$F$4
End Sub
5. 参照スタイルの切り替え(A1形式 / R1C1形式)
Sub Sample4()
MsgBox Range("B3").Address(, , xlA1) ' → $B$3
MsgBox Range("B3").Address(, , xlR1C1) ' → R3C2
End Sub
xlA1
:A1スタイル(デフォルト)xlR1C1
:R1C1スタイル(行列番号で表現)
6. 外部参照付きアドレス
Sub Sample5()
MsgBox Range("A1").Address(, , , True)
End Sub
実行中のブックが Book1.xlsx
、シート名が Sheet1
なら:
swiftコピーする編集する[Book1.xlsx]Sheet1!$A$1
- 外部ブックをまたいで参照する時に有効
- ブック名やシート名を含んだアドレス文字列を返す
7. RelativeTo:相対参照の基準セルを指定
相対参照を使用するときに、どのセルからの相対かを指定できます。
Sub Sample6()
Dim baseCell As Range
Set baseCell = Range("A1")
MsgBox Range("C3").Address(False, False, xlA1, False, baseCell)
End Sub
結果:
「C3」から「A1」を基準に相対アドレスを取得 → C3
(これは基準がないと通常と同じ。複雑な相対構文にも対応可能)
8. アドレス情報を利用した応用例
8-1. 選択範囲をメッセージで表示
Sub ShowSelectionAddress()
MsgBox "現在の選択範囲:" & Selection.Address
End Sub
8-2. セルアドレスを一覧に記録
Sub ListAddresses()
Dim cell As Range
Dim i As Long: i = 1
For Each cell In Range("A1:A10")
Cells(i, 3).Value = cell.Address(False, False)
i = i + 1
Next
End Sub
9. Range.Address と AddressLocal の違い
Address
:英語式(A1、B2)AddressLocal
:ローカル言語形式(たとえば日本語設定ではR1C1
風)
MsgBox Range("A1").Address ' → $A$1
MsgBox Range("A1").AddressLocal ' → $A$1(日本語設定でも基本は同じ)
10. 注意点とベストプラクティス
注意点 | 内容 |
---|---|
$ の有無 | 省略時は $A$1 形式になる。必要に応じて False を指定して相対化。 |
複数セル | $A$1:$C$3 のような形式で返される。 |
ワークシート間操作 | Address(,,,True) でフルパス付きで使うと誤参照防止になる。 |
可読性 | Range("A1").Address(False, False) のように明示的に記述することで、意図が明確になる。 |
11. Addressを使ったシート間コピー例
Sub CopyRangeUsingAddress()
Dim src As Range
Dim dst As Range
Set src = Worksheets("Sheet1").Range("A1:B3")
Set dst = Worksheets("Sheet2").Range(src.Address)
src.Copy Destination:=dst
End Sub
Address
を使うことで、範囲を動的に取得・利用できます。
12. まとめ
機能 | 内容 |
---|---|
目的 | セルやセル範囲のアドレス(位置)を文字列として取得 |
戻り値 | 例:$A$1 , B2 , R1C1 などの文字列 |
絶対/相対指定 | True or False で $ の有無を制御可能 |
参照形式 | xlA1 , xlR1C1 を選択可能 |
外部参照 | ブック名やシート名を含めた形式で出力可能 |
相対基準 | RelativeTo によって相対アドレスの基準指定可能 |