まりふのひと

Excel/列番号を列記号に変換するコード

タイトル列番号を文字列・アルファベットに変換する:Excel エクセルの使い方-マクロ/VBA
http://www.relief.jp/itnote/archives/003478.php
ホームインストラクターのネタ帳
http://www.relief.jp/itnote/
ExcelVBA で、列番号を列記号に変換する関数。
自作の「住所録マクロ」で同じことをしようとしたが、関数を作るのが面倒なので、「列番号」で押し通したぁ...

コード

上記サイトにコードが載っているが、自己流にコーディングし直した。

Option Explicit

Function ColNum2Text(argColNum As Long) As String
On Error GoTo Err_ColNum2Text
Dim mbTitle As String
Dim strAddr As String

    mbTitle = "ColNum2Text"
    strAddr = Cells(1, argColNum).Address(False, False)
    ColNum2Text = Left(strAddr, Len(strAddr) - 1)
    
Exit_ColNum2Text:
    Exit Function

Err_ColNum2Text:
    MsgBox "列番号が不正です。" & vbCrLf & vbCrLf _
            & " ■列番号=" & argColNum & vbCrLf & vbCrLf _
            & Err.Number & "/" & Err.Description, vbCritical, mbTitle
    ColNum2Text = ""
    Resume Exit_ColNum2Text
End Function

実行結果

ヘルプ Address プロパティ

●Address プロパティを Range オブジェクトに指定した場合

マクロの言語の範囲参照を返します。値の取得のみ可能です。文字列型 (String) の値を使用します。

expression.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo )

expression 必ず指定します。上のいずれかのオブジェクトを返すオブジェクト式を指定します。
RowAbsolute 省略可能です。バリアント型 (Variant) の値を使用します。行部分の参照を絶対参照として返すには、True を指定します。既定値は True です。
ColumnAbsolute 省略可能です。バリアント型 (Variant) の値を使用します。列部分の参照を絶対参照として返すには、True を指定します。既定値は True です。
ReferenceStyle 省略可能です。XlReferenceStyle クラスの定数を使用します。
External 省略可能です。バリアント型 (Variant) の値を使用します。外部参照を返すには、True を指定します。ローカル参照を返すには、False を指定します。既定値は False です。
RelativeTo 省略可能です。バリアント型 (Variant) の値を使用します。引数 RowAbsolute と引数 ColumnAbsolute に False が指定されていて、引数 ReferenceStyle に xlR1C1 が設定されていると、相対参照の開始点を含める必要があります。この引数は、開始点を定義する Range オブジェクトです。
●解説

参照に複数のセルが含まれている場合は、引数 RowAbsolute と引数 ColumnAbsolute にはすべての行と列が適用されます。

●使用例

次の使用例は、シート 1 の同じセル アドレスを 4 つの異なる方法で表します。コード中のコメントは、メッセージで表示されるアドレスを示しています。

Set mc = Worksheets("Sheet1").Cells(1, 1)
MsgBox mc.Address()                              ' $A$1
MsgBox mc.Address(RowAbsolute:=False)            ' $A1
MsgBox mc.Address(ReferenceStyle:=xlR1C1)        ' R1C1
MsgBox mc.Address(ReferenceStyle:=xlR1C1, _
    RowAbsolute:=False,     _
    ColumnAbsolute:=False,  _
    RelativeTo:=Worksheets(1).Cells(3, 3))        ' R[-2]C[-2]

一応、ヘルプも調べた。
引数を省略すると絶対番地($付き)が返るので、上記の関数では不都合が発生するため、面倒なコードになる。

    strAddr = Cells(1, argColNum).Address
    ColNum2Text = Mid(strAddr, 2, InStrRev(strAddr, "$", -1) - 1 - 1)

引数は省略しない方がいい。