更新日:、 作成日:

VBA 列番号または列名を取得する

はじめに

Excel VBA マクロの列番号または列名を取得する方法を紹介します。

Range("B1").Column メソッドから、セル「B1」の列番号を取得できます。列番号を列名に変換できます。

Range.Columns.Count プロパティから、セルの範囲の列数を取得できます。

Range.Column + Range.Columns.Count - 1 から、セルの範囲の最終列番号を取得できます。

列番号から列を取得するには「列を取得する」をご覧ください。
行番号を取得するには「行番号や行数を取得する」をご覧ください。

列番号を取得する

Range の引数にセル名を指定すると、そのセルの列番号を取得できます。

セル「A1」の列番号を取得するには Range("A1").Column を入力します。

Dim l As Long
l = Range("A1").Column ' 1
l = Range("C1").Column ' 3
Debug.Print(l)

アクティブセル

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

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

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

選択セル

選択しているセルの列番号を取得するには Selection を入力します。範囲選択しているときは、一番左の列番号を取得します。

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

セルの範囲の列番号を取得する

セルの範囲「B2」~「D4」の列番号を取得するには Range("B2:D4").Column を入力します。その範囲の一番左の列番号を取得します。

セルの範囲の列数を取得するには Range.Columns.Count のように入力します。

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

最終列番号を取得する

セルの範囲「B2」~「D4」の最終列番号を取得するには Range.Column + Range.Columns.Count - 1 または Range.Columns(Range.Columns.Count).Column のように入力します。

Dim c As Range
Set c = Range("B2:D4")

Dim l As Long
l = c.Column + c.Columns.Count - 1    ' 4
l = c.Columns(c.Columns.Count).Column ' 4
Debug.Print(l)

Range.CurrentRegionUsedRange を使用して、データの範囲やシート全体の最終列番号を取得できます。

詳しくは「最終列を取得する」をご覧ください。

列番号から列名を取得する

VBA には列番号から列名を取得する関数はありませんが、公式のドキュメントにその方法が記載されています。

Function ConvertToLetter(iCol As Long) As String
    Dim a As Long
    Dim b As Long
    a = iCol
    ConvertToLetter = ""
    Do While iCol > 0
        a = Int((iCol - 1) / 26)
        b = (iCol - 1) Mod 26
        ConvertToLetter = Chr(b + 65) & ConvertToLetter
        iCol = a
    Loop
End Function

引数に列番号を渡すと、1 → A、27 → AA のように変換します。

Dim s As String
s = ConvertToLetter(1)  ' A
s = ConvertToLetter(26) ' Z
s = ConvertToLetter(27) ' AA
Debug.Print(s)