オブジェクトRange プロパティ Address

Range

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 によって相対アドレスの基準指定可能
タイトルとURLをコピーしました