Excel VBA

Column

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

 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.CurrentRegion や UsedRange を使用して、データの範囲やシート全体の最終列番号を取得できます。

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

 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)