和風スパゲティのレシピ

日本語でコーディングするExcelVBA

アルファベット(ABC)⇔数字(123)を変換する関数

アルファベット(ABC)を数字(123)に、またはその逆の変換をする関数を紹介します。

列見出しと列番号の相互変換という需要がほとんどと思いますので、
27番以降はAA~と対応させる関数を作成します。

アルファベットを数値に変換する関数

Function ConvABC→123(ByVal アルファベット As String) As Long
    On Error Resume Next
    ConvABC→123 = Range(アルファベット & 1).Column
End Function

' 実行例
MsgBox ConvABC→123("J") ' ← 20が表示されます
MsgBox ConvABC→123("AB") ' ← 28が表示されます

こちらがABC→123に変換する関数です。

目的がセルアドレスですので、ストレートに「Rangeプロパティ」にアルファベットを渡して列番号を求めます。


アルファベット以外を渡したときは0を返しますが、
関数にしていると面倒なIf文を作らなくても、
On Error Resume Nextで済むのがいいですね。

数値をアルファベットに変換する関数

Function Conv123→ABC(ByVal n As Long) As String
    On Error Resume Next
    Dim セルアドレス As String
    セルアドレス = Cells(1, n).Address(False, False)
    Conv123→ABC = Left(セルアドレス, Len(セルアドレス) - 1)
End Function

' 実行例
MsgBox Conv123→ABC(20) ' ← Tが表示されます
MsgBox Conv123→ABC(37) ' ← AKが表示されます

反対に、123→ABCに変換する関数がこちらです。

先ほどの逆をするだけですが、「末尾に1をつける」より「末尾の1文字を消す」方が、ちょっとだけ面倒ですね。


なお、見やすいように「→」を使いましたが、
Ctrl+Spaceのショートカット「入力候補の表示」

conv

を使っていないと尋常じゃなく入力が面倒です。

タイプミスによる変数の取り違えを減らす意味でも、
ExcelVBAで最も重要なショートカットですので、
使っていなかった方は必ず覚えて使えるようにしましょう。

おまけ:その他の方法

ちなみに、もしこのページに来た目的が、
ただ単に「Cells(1, ○)の○を調べたい」ということでしたら、

Cells(1, "L")

のようにCellsプロパティにはアルファベットも渡せます。


また、自作のマクロを作るなら、

123表示

↑こうやってシートの見出し表示自体を123に切り替える方法もあります。

www.limecode.jp


純粋な文字列が欲しいなら本ページで紹介した関数がいいですが、
変換した結果をただ知りたいだけなら、これらの方法もご活用ください。