【Excel VBA】数値の列番号をアルファベットの列名(A, B, AA列など)に変換する方法

VBAでForループを使い列を順番に処理する場合、Cells(行番号, 列番号)のように、列を数値で扱うのが一般的です。しかし、処理の過程で「28番目の列」を「AB列」のように、見慣れたアルファベットの列名に変換したい場面が出てきます。

残念ながら、VBAにはこの変換を直接行うColumnNumberToLetter()のような関数は用意されていません。しかし、セルの.Addressプロパティの特性を利用した簡単なテクニックで、この変換を実現できます。

この記事では、そのスマートな変換方法を、再利用しやすい関数として紹介します。


目次

完成したVBAコード(再利用可能な関数)

以下が、列番号を引数として渡すと、対応する列名を返すFunction(自作関数)です。この関数を標準モジュールにコピーしておけば、いつでも自分のマクロから呼び出して使えます。

' 列番号をアルファベットの列名に変換する関数
Function ConvertColumnNumberToLetter(ByVal colNumber As Long) As String

    Dim result As String
    
    ' 列番号が有効な範囲内かチェック
    If colNumber > 0 And colNumber <= Columns.Count Then
        ' .Addressプロパティを利用して列名を取得
        result = Split(Cells(1, colNumber).Address, "$")(1)
    Else
        result = "Error"
    End If
    
    ConvertColumnNumberToLetter = result

End Function


' --- 上記関数の使い方を示すサンプルコード ---
Sub Demo_GetColumnLetter()

    Dim columnNum As Long
    Dim columnLetter As String
    
    ' 例1: 28番目の列名を取得
    columnNum = 28
    columnLetter = ConvertColumnNumberToLetter(columnNum)
    MsgBox columnNum & "番目の列名は「" & columnLetter & "」です。" ' -> 結果: 「AB」
    
    ' 例2: 255番目の列名を取得
    columnNum = 255
    columnLetter = ConvertColumnNumberToLetter(columnNum)
    MsgBox columnNum & "番目の列名は「" & columnLetter & "」です。" ' -> 結果: 「IU」

End Sub

コードのポイント解説(変換の仕組み)

このテクニックの核心部分は、Split(Cells(1, colNumber).Address, "$")(1)という一行にあります。これを分解して見ていきましょう。

1. Cells(1, colNumber)

まず、変換したい列番号(colNumber)を使い、その列のいずれかのセルを参照します。どの行でも良いため、一番シンプルな1行目を指定します。例えばcolNumber28なら、これはAB1セルを指します。

2. .Address

次に、そのセルの.Addressプロパティを取得します。引数を省略した場合、このプロパティは絶対参照形式のセルアドレスを文字列として返します。 Cells(1, 28).Address は、文字列 "$AB$1" を返します。

3. Split(..., "$")

Split関数を使い、取得した文字列"$AB$1"を、区切り文字"$"で分割します。これにより、以下の3つの要素を持つ配列が作成されます。

  • (0): “” (最初の$の前なので空)
  • (1): “AB”
  • (2): “1”

4. (...)(1)

Splitで作成された配列は0から始まるため、その2番目(インデックス番号1)の要素を取り出します。これが、目的の列名"AB"となります。

この一連の流れにより、どんな列番号でもアルファベットの列名に変換できるのです。


まとめ

VBAで数値の列番号をアルファベットの列名に変換するには、直接的な関数はありませんが、.AddressプロパティとSplit関数を組み合わせたトリックで簡単に実現できます。

Split(Cells(1, 列番号).Address, "$")(1)

この一行で変換できることを覚えておくと非常に便利です。今回紹介したFunctionを自分の標準モジュールに保存しておけば、様々なマクロ開発の場面で役立つでしょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次