【Excel VBA】列番号からアルファベットの列名を取得する自作関数

Excel VBA

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)
  • 1
    Columns(65).Address

    colNumに65を代入して、65列目のセル番地「$BM:$BM」を取得する。

  • 2
    Split(“$BM:$BM”, “$”)

    「$BM:$BM」を$で区切って文字列を取り出す。

    (0)番目 空

    (1)番目 BM:

    (2)番目 BM

  • 3
    Split(“$BM:$BM”, “$”)(2)

    Split関数で分割した文字列のうち(2)番目の値を取得する。

  • 4
    ColumnIdx2Name = “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

ソースコードの解説はリンク先をご覧ください。

Excel VBA
\ お友だちにも教えてあげましょう/
プロフィール
最適屋

Excel VBAとAccessを独学で習得。2011年から現在まで株式会社アントレ(旧: 株式会社リクルート アントレユニット)と業務委託契約を結ぶ。Excel/Accessで様々な効果集計ツールや営業支援ツールを開発・提供。
過去、株式会社リクルートスタッフィング アウトソーシング契約社員時代には、 SV、業務フローの設計・改善に従事。
他、WordPressによるWeb制作やSEO対策も。

Follow Me!
川良最適化事務所
タイトルとURLをコピーしました