列の英字と数字を変換する

VBAで列(横)座標を指定する際に、行(縦)と同じように連番でほしい場合があります。Cells関数を使う場合などですね。

しかし列座標は英字になっており、AからZ、Zの次はAAと独自ルールで設定されています。このことから、列BGは数字でいうと何番?というような場合にすぐにわかりません。

そのような場合に英字列から数字、数字列から英字を取得する方法を紹介します。

列の英字から数字を取得するコード(A列→1列目)

列位置を数字で取得するには、対象列のRangeオブジェクトのColumnプロパティを参照することで可能です。

例えばB列であれば、以下のように取得できます。

列の数字から英字を取得するコード(1列目→A列)

列位置を英字で取得するには、対象列のRangeオブジェクトのAddressプロパティの列の英字部分を参照することで可能です。

Addressプロパティは「$A$1」のように$で区切られて表現されます。これをSplit関数で$で区切ると、配列の1番目に列の英字、2番目に行の数字が返されます。

それを利用して、例えば2列目であれば、以下のように取得できます。

 

お遊びコード。列の英字から数字を「がんばって」取得するコード

以下はおあそびコードです。実際に使うのは上のを使ってください

上記のRangeオブジェクトのプロパティを使う方法ではなく、文字コード表を使って頑張って取得する方法です。

CnvColAlphaToInt関数で列座標の数字を取得します。この関数はExcel2007以降の16384列に対応しています。英字を数字に変換する個所はGetColInt関数で切り出しています。

 

お遊びコード。列の数字から英字を「がんばって」取得するコード

上とは逆に数字から英字に戻すマクロです。

こちらもExcel2007に対応済みで、数字を英字に変換する個所はGetColAlpha関数に切り出しています。