65列目はアルファベットで表すと何列だっけ?
最適屋
BM列ですね!
列番号を取り出すのは簡単。逆に、65列目をアルファベットでいうと何列か?を即答できる関数はありません。
無いならば自分で関数を作ってしまいましょう!
VBAソースコードと解説
Qiitaに掲載されていたVBAコードがシンプルで秀逸でした!
これ以上にカンタンなやり方はないので、解説も添えて紹介します。
列番号からアルファベットの列名を取得するソースコード
' 列番号→列名
Function ColumnIdx2Name(ByVal colNum As Long) As String
ColumnIdx2Name = Split(Columns(colNum).address, "$")(2)
End Function
元の記事はこちらです。
ソースコードの解説
次のプロパティと関数を組み合わせています。
- Columnsプロパティ
- Addressプロパティ
- Split関数
たとえば、65列目のアルファベットの列名を求めようとすると、コードは次のような動きをします。
ColumnIdx2Name = Split(Columns(colNum).address, “$”)(2)
- 1Columns(65).Address
colNumに65を代入して、65列目のセル番地「$BM:$BM」を取得する。
- 2Split(“$BM:$BM”, “$”)
「$BM:$BM」を$で区切って文字列を取り出す。
(0)番目 空
(1)番目 BM:
(2)番目 BM
- 3Split(“$BM:$BM”, “$”)(2)
Split関数で分割した文字列のうち(2)番目の値を取得する。
- 4ColumnIdx2Name = “BM”
ColumnIdx2Nameに「BM」を返す。
実践編|列名をダイアログメッセージに表示する
エラーメッセージには列番号ではなく列名を表示した方が、ユーザーには親切です。
この記事の実践編として、列名をダイアログメッセージに表示するVBAコードを解説しています。
VBAソースコード・別解
古式ゆかしい、Microsoft公式のやり方も載せておきます。
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
ソースコードの解説はリンク先をご覧ください。