« VBAでファイルの存在を確認してから開く | トップページ | VBAで警告なしにシートを削除する »

2010年3月 9日 (火)

列を表す英文字を列番号に変換

記事「列番号を 英文字に変換してRangeプロパティに使う
では、列番号を英文字に変換しました。

今回は、その逆で
英文字を列番号に変換します。

仕組みは、
10進数を2進数に変換する要領です。

列を表す英文字を列番号に変換するコード:

Sub macro100309a()
'列を表す英文字を列番号に変換
    Dim i, IntColumn, ChrNum As Integer
    Dim StrColumn As String
    '変換したい英文字を設定(大文字で)
    StrColumn = "CD"
    For i = 0 To Len(StrColumn) - 1
        ChrNum = Asc(Mid(StrColumn, Len(StrColumn) - i, 1)) - 64
        IntColumn = IntColumn + 26 ^ i * ChrNum
    Next i
    MsgBox StrColumn & " = " & IntColumn
End Sub

変換後の列番号をMsgBoxで表示する。
Vba20100309a

アルファベットは26文字なので26進数になります。
Aが1、Bが2、Cが3、…、Zが26になるのは簡単に分かります。

"CD"を番号にする場合を説明します。
Cは3、Dは4です。
Cは2桁目なので、3 * 26^1= 78
Dは1桁目なので、4 * 26 ^ 0 = 4
78 + 4 = 82
よって、英文字"CD"は、列番号82になります。

アルファベットを数字に変換するのに
Asc関数を使います。

Asc("A") = 65
Asc("B") = 66

Asc("Z") = 90

Asc関数は以上のようにAからZまでで、
65から90までの数字を返します。(大文字で)

Aを1に変換するには
Asc("A") - 64 = 1
のように64を引きます。
他のアルファベットも同様です。

このアルファベットを変換した数字を使って
26進数である英文字を上で説明したように
10進数に変換します。

コードの中に出てくる関数の説明はVBAヘルプにあります。

|

« VBAでファイルの存在を確認してから開く | トップページ | VBAで警告なしにシートを削除する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 列を表す英文字を列番号に変換:

« VBAでファイルの存在を確認してから開く | トップページ | VBAで警告なしにシートを削除する »