エクセル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([指定セルの行番号], [指定セルの列番号])