好きこそものの上手なれ

他人から見れば、下手の横好きですが、そっと見守ってください。

Excel VBA 列番号から列名、列名から列番号に変換

エクセルのVBAで、列番号の数値がわかっていて、列名で処理したい時があります。
その時は以下の関数を作成すると便利です。


Option Explicit


Function 列番号から列名(ByVal colNum As Long) As String

    列番号から列名 = Split(Columns(colNum).Address, "$")(2)

End Function


Function 列名から列番号(ByVal colName As String) As Long

    列名から列番号 = Columns(colName).Column

End Function



上の図は、イミディエイトウィンドウで、結果を試しております。


列名は大文字の英字を返します。小文字にしたい場合は、? lcase(列番号から列名(1))とします。(Lcase関数)


列名から列番号を求める際に、列名は大文字小文字関係なく、絶対アドレスの$がついていても結果は同じです。


Columns関数が両方の変換で使いますので、肝(キモ)です。


列名は、Addressプロパティで列名を出して、Split関数で配列に分割します。
例えば、列番号1なら$A:$Aが返され、$で分割すると  A: と Aが配列として返され、インデックス2番目はAなので、それが列名として返されます。


列番号は、Columnプロパティを使うと、簡単に求まります。





※ご意見もお待ちしております。