更新日:、 作成日:

VBA セルの位置を取得する (Range.Address)

はじめに

Excel VBA マクロのセルで位置や番地を取得する方法を紹介します。

Range("B1").Row または Cells(1, 2).Column プロパティから、セル「B1」の位置を行番号と列番号で取得できます。

Address プロパティから、セル名(番地)を取得できます。

セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。

セルの位置や番地を取得する

Range の引数にセル名を指定すると、そのセルの位置や番地を取得できます。

セル「B3」の位置を行番号と列番号で取得するには Range("B3").Row または Range("B3").Column を入力します。

Address プロパティから、そのセル名 (番地) を取得できます。絶対参照で取得します。

Dim l As Long
l = Range("B3").Row    ' 3
l = Range("B3").Column ' 2
Debug.Print(l)

Dim s As String
s = Range("B3").Address ' "$B$3"
Debug.Print(s)

Cells の引数にセルの行と列の番号を指定すると、そのセルの位置や番地を取得できます。

行「2」、列「A」の行番号と列番号を取得するには Cells(2, 1).Row または Cells(2, 1).Column を入力します。

Dim l As Long
l = Cells(2, 1).Row    ' 2
l = Cells(2, 1).Column ' 1
Debug.Print(l)

Dim s As String
s = Cells(1, 1).Address) ' $A$1
s = Cells(2, 1).Address) ' $A$2
s = Cells(1, 2).Address) ' $B$1
s = Cells(2, 2).Address) ' $B$2
Debug.Print(s)

Cells は指定したセルを基点にして、そこから指定した行や列の位置にあるセルを取得できます。

Dim s As String
' セル「B2」を基点にする
s = Range("B2").Cells(1, 1).Address ' $B$2
s = Range("B2").Cells(2, 1).Address ' $B$3
s = Range("B2").Cells(1, 2).Address ' $C$2
Debug.Print(s)

アクティブセル

アクティブセルの位置を取得するには ActiveCell を入力します。

Dim l As Long
l = ActiveCell.Row
l = ActiveCell.Column
Debug.Print(l)

Dim s As String
s = ActiveCell.Address
Debug.Print(s)

アクティブセルとは、フォーカスがあるセルのことです。

選択セル

選択しているセルの位置を取得するには Selection を入力します。範囲選択しているときは、左上の位置を取得します。Address はその範囲を取得します。

Dim l As Long
l = Selection.Row
l = Selection.Column
Debug.Print(l)

Dim s As String
s = Selection.Address
Debug.Print(s)

セルの範囲の位置や番地を取得する

セルの範囲「B2」~「D4」の位置を取得するには Range("B2:D4").Row または Range("B2", "D4").Column を入力します。左上の位置を取得します。

行数と列数を取得するには Range("B2:D4").Rows.Count または Range("B2", "D4").Columns.Count を入力します。

Dim l As Long
l = Range("B2:D4").Row           ' 2
l = Range("B2:D4").Rows.Count    ' 3
l = Range("B2:D4").Column        ' 2
l = Range("B2:D4").Columns.Count ' 3
Debug.Print(l)

Dim s As String
s = Range("B2:D4").Address ' $B$2:$D$4
Debug.Print(s)

範囲選択しているセルの隅の位置を取得するには次のようにします。

1
Dim c As Range

' 左上 $B$2
Set c = Cells(Selection.Row, Selection.Column)
' 左下 $B$4
Set c = Cells(Selection.Row + Selection.Rows.Count - 1, Selection.Column)
' 右上 $D$2
Set c = Cells(Selection.Row, Selection.Column + Selection.Columns.Count - 1)
' 右下 $D$4
Set c = Cells(Selection.Row + Selection.Rows.Count - 1, Selection.Column + Selection.Columns.Count - 1)

Debug.Print(c.Address)