- Excel VBAでセルのアドレスを取得する方法
- Excel VBAでセルの位置を取得する方法
今回は上記のテーマで解説をしていきます。
Rangeオブジェクトを使用したAddressプロパティはセルのアドレスを文字列で返してくれます。基本的な構文としては下記となります。
Object.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
オプションの指定内容によって取得できる内容が異なってきます。引数は省略して使用することも可能ですが、その場合は絶対参照での取得となります。
具体的にどのように使うのか見ていきましょう。
[Excel VBA]セルのアドレスを取得する方法
それでは早速セルのアドレスを取得する方法を見ていきましょう。
まず基本コードは下記となっています。
Object.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
そして、設定するオプションの詳細は下記です。
名前 | 必須/ オプション | データ型 | 説明 |
RowAbsolute | Optional | Variant | True:行部分の参照を絶対参照として返す ※既定値はTrue |
ColumnAbsolute | Optional | Variant | True:列部分の参照を絶対参照として返す ※既定値はTrue |
ReferenceStyle | 省略可能 | XlReferenceStyle | 参照形式を指定する ※既定値はxlA1 |
外部 | Optional | Variant | True:外部参照を返す False:ローカル参照を返す ※既定値はFalse |
RelativeTo | Optional | Variant | RowAbsoluteおよびColumnAbsoluteがFalseであるときにReferenceStyleがxlR1C1である場合は、相対参照の開始点を含める必要がある。 この引数は開始点を定義するRangeオブジェクト。 |
参考:Microsoft
・・・これだけだとよくわからないと思うので実例を交えて見ていきます。まずはオプションなしの基本系でMsgboxとAactiveCellプロパティを活用して下記を実行しましょう。
MsgBox (ActiveCell.Address)
オプションなしで実行すると「$B$2」のように絶対参照で値を返してくれます。なお、オプションなしの場合は規定値が設定されているので下記と同意義となります。
MsgBox (ActiveCell.Address(True, True, xlA1, False, False))
ここから一つ一つ値を変えて実行すると返される値が下記のように変化します。
MsgBox (ActiveCell.Address(False, True, xlA1, False, False)) → $B2
MsgBox (ActiveCell.Address(True, False, xlA1, False, False)) → B$2
MsgBox (ActiveCell.Address(True, True, xlR1C1, False, False)) → R2C2
MsgBox (ActiveCell.Address(True, True, xlA1, True, False)) → [Book1]Sheet1!$B$2
MsgBox (ActiveCell.Address(False, False, xlR1C1, False, Cells(3, 1))) → R[-1]C[1]
上記のようにすべてのオプションを指定するのが面倒という場合は下記のようにオプションの名前を指定した上でオプションを指定することもできます。
MsgBox (ActiveCell.Address(RowAbsolute:=False))
このように必要に応じてオプションの内容を工夫しながら取得する値を変更することが可能です。
[Excel VBA]現在のアクティブセルのアドレスを取得する方法
続いて現在のアクティブセルのアドレスを取得する方法については下記にて解説をしています。
Excel VBAで指定のセルをアクティブにする方法と現在のセルを取得する方法について解説。ActiveCellプロパティの基本的な使い方、.Cellsプロパティや.Rangeプロパティや.Topプロパティと併用する方法も解説してるので参考にどうぞ。
上記の記事では、現在のアクティブなセルの座標を取得する方法以外にもアクティブセルにする基本的な方法も解説しているので参考にしてみてください。
[Excel VBA]検索したセルのアドレスを取得する方法
上記はセルのアドレスを取得する方法はアクティブセルプロパティを使って解説をしました。中には検索したセルのアドレスを取得したいという方もいるかと思います。
そこで検索したセルのアドレスを取得する方法についても見ていきましょう。実際のコードをお見せした方がわかりやすいと思うので、サンプルコードをお見せすると下記の通りです。
Sub Cell()
Dim HitCell As Range '検索でヒットしたセル
Dim HitArea As Range '検索するセルの範囲
Const Keyword = "番地" '検索に使う名前
'指定した名前で検索
Set HitArea = Range("A1:C6")
Set HitCell = HitArea.Find(Keyword, lookat:=xlWhole)
'検索に該当したセルを表示
MsgBox (HitCell.Address)
End Sub
B2セルに検索している「番地」が記入されている場合、「$B$2」が返されます。
一つ注意点として上記で該当するセルがないとエラーになってしまうので、下記のように検索でヒットしたかどうかをNothingプロパティで判断すると良いでしょう。
Sub Cell()
Dim HitCell As Range '検索でヒットしたセル
Dim HitArea As Range '検索するセルの範囲
Const Keyword = "番地" '検索に使う名前
'指定した名前で検索
Set HitArea = Range("A1:C6")
Set HitCell = HitArea.Find(Keyword, lookat:=xlWhole)
'検索に該当したセルを表示
If HitCell Is Nothing Then
MsgBox ("該当がありませんでした。")
Else
MsgBox (HitCell.Address)
End If
End Sub
[Excel VBA]セル範囲のアドレスを取得する方法
ここまでは基本的に一つのセルの位置をアドレスで取得する方法について見てきました。使い方として、中には複数のセルを範囲している時に選択しているセルを範囲で取得したいということもあるかと思います。
例えば「B2:E5」セルを選択している場合、下記のように実行すると「$B$2:$E$5」と返してくれます。
Sub Cell()
MsgBox (Selection.Address)
End Sub
臨機応変にAddressプロパティを活用していきましょう。