【Excel VBA】セルの番地(Address)を取得する方法

ExcelVBAヘッダー Excel VBA

今回は、あるセルの番地を取得する方法について、解説していきます。

ここで言う「セルの番地」とは、セルの位置を表現するために使う「A1」や「D3」などの表現方法です。

「A1」であれば、1列目1行目、「D3」であれば、4列目3行目ですね。

このセルの番地を、ExcelVBAで取得するには、Addressプロパティを使います。

このAddressプロパティはRangeオブジェクト、Cellsプロパティに対し、使うことができます。

Addressプロパティは「セルの番地」を戻り値として返し、数種類の引数を指定することもできます。

適切な引数を指定することで、いろいろな形式で戻り値を取得することができるんです。

Addressプロパティの実例を挙げる前に、引数について説明していきます。

Addressプロパティの引数

構文

(Rangeオブジェクト か Cellsプロパティ).Address([RowAbsolute], [ColumnAbsolute], [ReferenceStyle], [External], [RelativeTo])

これはAddressプロパティの構文ですが、引数について下表にまとめてみました。

ちなみに下の引数については、すべて省略可能です。

すべて省略した場合は、単純に「$」が付いた絶対参照で「セルの番地」を戻り値として返します。

引数 解説
RowAbsolute Trueにすると、行の「$」が付く絶対参照、Falseにすると「$」が付かない相対参照です。規定値は「True」です。
ColumnAbsolute Trueにすると、列の「$」が付く絶対参照、Falseにすると「$」が付かない相対参照です。規定値は「True」です。
ReferenceStyle 定数「xlA1」と指定すると、A1形式に、定数「xlR1C1」と指定すると、R1C1形式になります。
External Trueの場合は外部からの参照、つまりブック名、シート名を付けてセルの番地が戻り値となります。False、または省略した場合は、そのシート内での参照となりますので、セルの番地のみが戻り値となります。
RelativeTo この引数で指定したセルから見た位置を戻り値として取得できます。引数のRowAbsoluteがFalseで、かつColumnAbsoluteがFalse。また、ReferenceStyleがxlR1C1の場合のみ、この引数を使うことができます。

A1形式とR1C1形式とは

引数「ReferenceStyle」で、A1形式とR1C1形式を指定できることは先ほど解説しました。

では、この「A1形式」、「R1C1形式」とは何でしょうか。

「A1形式」とは、Excelを日々使っている方にとっては、見慣れた「セルの番地」指定方法です。

「A1」や「D4」、「AA20」など列と行を指定することで「セルの番地」を表現します。

「R1C1形式」の「R」は「Row(行)」のこと、「C」は「Column(列)」のこと。

したがって、「R」の後ろに「行」を、「C」の後ろに「列」を数値で指定します。

「R4C5」なら、4行目5列目、「R10C8」なら、10行目8列目といった感じです。

Addressプロパティの実例

それでは、ExcelVBAのエディターを開き、標準モジュールを作成してください。

Mainという名前のプロシージャで、下のコードでマクロを実行した時の、結果を見てみましょう。

ちなみに、「AddressSample.xlsm」というファイル名で、「Result」というシート名でマクロを実行しています。

お時間に余裕がありましたら、下のコードをコピーして、標準モジュールに貼り付けてみてください。

Public Sub Main()

With ActiveSheet
    .Range("A1").Value = .Range("A1").Address
    .Range("A2").Value = .Range("A2").Address(RowAbsolute:=False)
    .Range("A3").Value = .Range("A3").Address(ColumnAbsolute:=False)
    .Range("A4").Value = .Range("A4").Address(False, False)
    .Range("A5").Value = .Range("A5").Address(ReferenceStyle:=xlA1)
    .Range("A6").Value = .Range("A6").Address(ReferenceStyle:=xlR1C1)
    .Range("A7").Value = .Range("A7").Address(External:=False)
    .Range("A8").Value = .Range("A8").Address(External:=True)
    .Range("A9").Value = .Range("A9").Address(ColumnAbsolute:=False, _
                RowAbsolute:=False, ReferenceStyle:=xlR1C1, Relativeto:=.Range("C15"))
    .Range("A10").Value = .Range("A10").Address(False, False, xlR1C1, False, .Range("C16"))
End With

End Sub

Addressプロパティの引数を変えて、その戻り値をシートのセル「A1」からセル「A10」まで、表示させてみました。

表示結果は下のようになります。

ExcelVBAのAddressプロパティ実行結果

Addressプロパティの引数によって、戻り値が異なることがわかったと思います。

Addressプロパティをマスターして、セルの番地を自由に取得できるようにしておきましょう。

タイトルとURLをコピーしました