【VBA】セルのアドレスを取得する

エクセルVBAでよく使うコードの備忘録。VBAで指定したエクセル上のセルのアドレス($A1のような文字列など)を取得するコード。

スポンサーリンク

事前準備

特になし。

共通コード

説明するコードを簡素化するために使用した変数などの共通部分です。今回のテーマの本質的な部分には関係はありません。コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

'--- ワークシートを指定 ---'
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("[ワークシート名]")

行・列の絶対参照

行・列ともに絶対参照の形式でアドレスを取得する($A$1みたいな形式)には、下記オブジェクトのAddressプロパティに引数なしでアクセスします。

'--- 現在のセル ---'
ActiveCell.Address

'--- 指定セル ---'
ws.Cells([行番号], [列番号]).Address

'--- 現在の選択範囲 ---'
Selection.Address

'--- 指定範囲 ---'
ws.Range("[範囲のアドレス]").Address

行のみ相対参照

行のみ相対参照で表示する(A$1みたいな形式)には、AddressプロパティのRowAbsoluteをFalseに設定します。

'--- 現在のセル ---'
ActiveCell.Address(RowAbsolute:=False)

'--- 指定セル ---'
ws.Cells([行番号], [列番号]).Address(RowAbsolute:=False)

'--- 現在の選択範囲 ---'
Selection.Address(RowAbsolute:=False)

'--- 指定範囲 ---'
ws.Range("[範囲のアドレス]").Address(RowAbsolute:=False)

列のみ相対参照

列のみ相対参照で表示する($A1みたいな形式)には、AddressプロパティのColumnAbsoluteをFalseに設定します。

'--- 現在のセル ---'
ActiveCell.Address(ColumnAbsolute:=False)

'--- 指定セル ---'
ws.Cells([行番号], [列番号]).Address(ColumnAbsolute:=False)

'--- 現在の選択範囲 ---'
Selection.Address(ColumnAbsolute:=False)

'--- 指定範囲 ---'
ws.Range("[範囲のアドレス]").Address(ColumnAbsolute:=False)

行・列の相対参照

行・列ともに相対参照で表示する(A1みたいな形式)には、AddressプロパティのRowAbsoluteとColumnAbsoluteをともにFalseに設定します。

'--- 現在のセル ---'
ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)

'--- 指定セル ---'
ws.Cells([行番号], [列番号]).Address(RowAbsolute:=False, ColumnAbsolute:=False)

'--- 現在の選択範囲 ---'
Selection.Address(RowAbsolute:=False, ColumnAbsolute:=False)

'--- 指定範囲 ---'
ws.Range("[範囲のアドレス]").Address(RowAbsolute:=False, ColumnAbsolute:=False)

R1C1形式

R1C1形式で表示する(R1C1みたいな形式)には、AddressプロパティのReferenceStyleをxlR1C1に設定します。

'--- 現在のセル ---'
ActiveCell.Address(ReferenceStyle:=xlR1C1)

'--- 指定セル ---'
ws.Cells([行番号], [列番号]).Address(ReferenceStyle:=xlR1C1)

'--- 現在の選択範囲 ---'
Selection.Address(ReferenceStyle:=xlR1C1)

'--- 指定範囲 ---'
ws.Range("[範囲のアドレス]").Address(ReferenceStyle:=xlR1C1)

外部参照形式

外部から参照した場合に表示される形式([Book1]Sheet1!$A$1みたいな形式)で表示するには、AddressプロパティのExternalをTrueにします。

'--- 現在のセル ---'
ActiveCell.Address(External:=True)

'--- 指定セル ---'
ws.Cells([行番号], [列番号]).Address(External:=True)

'--- 現在の選択範囲 ---'
Selection.Address(External:=True)

'--- 指定範囲 ---'
ws.Range("[範囲のアドレス]").Address(External:=True)

指定セルからの相対参照

指定したセルからの相対参照形式(R[-2]C[-4]みたいな形式)で表示するには、下記のように引数を設定してください。

'--- 現在のセル ---'
ActiveCell.Address(ColumnAbsolute:=False, RowAbsolute:=False, ReferenceStyle:=xlR1C1, Relativeto:=ws.Cells([指定セルの行番号], [指定セルの列番号])

'--- 指定セル ---'
ws.Cells([行番号], [列番号]).Address(ColumnAbsolute:=False, RowAbsolute:=False, ReferenceStyle:=xlR1C1, Relativeto:=ws.Cells([指定セルの行番号], [指定セルの列番号])

'--- 現在の選択範囲 ---'
Selection.Address(ColumnAbsolute:=False, RowAbsolute:=False, ReferenceStyle:=xlR1C1, Relativeto:=ws.Cells([指定セルの行番号], [指定セルの列番号])

'--- 指定範囲 ---'
ws.Range("[範囲のアドレス]").Address(ColumnAbsolute:=False, RowAbsolute:=False, ReferenceStyle:=xlR1C1, Relativeto:=ws.Cells([指定セルの行番号], [指定セルの列番号])