VBAでカラムの位置を指定するのに、たいていはレターで指定するのですが、配列を扱う場合などで番号で指定しなければならないことがあるので、レターと番号を相互に変換できる関数を作成しました。
Option Explicit
Function N2L(ByVal colNum As Long, Optional colStr As String = "") As String
'仕様
'列の数値アドレスをアルファベットアドレスに変換する
If colNum = 0 Then '前回の商が0になった段階で関数の終わり
N2L = colStr
Else
colStr = Chr(&H41 + (colNum - 1) Mod 26) & colStr '余から最下位文字を決定し、その下位に前の結果を連結する
colNum = (colNum - 1) \ 26 '商
N2L = N2L(colNum, colStr) '商から次のケタの文字を生成(再帰)
End If
End Function
Function L2N(ByVal colname As String) As Long
'仕様
'列のアルファベットアドレスを数値アドレスに変換する
'アルファベットは大文字・小文字どちらでもよい
'変換例: A→1, AB→28, aBn→742
Dim leng As Long 'アルファベットアドレスの文字数
Dim i As Long 'forカウンタ
Dim moji As String 'アルファベットアドレスから切り出した1文字
Dim ascii As Long 'アスキーコード
leng = Len(colname) 'ABC方式の桁数を得る
L2N = 0 '戻値の初期化
If 0 < leng Then '桁数が0より大なら(つまり引数が空欄でなければ)
For i = 1 To leng
moji = Mid(colname, i, 1) '左から1文字ずつ切り出す
ascii = Asc(moji) '切り出した文字をASCIIコードに変換
If &H41 <= ascii And ascii <= &H5A Then 'アルファベットの大文字ならば
L2N = L2N * 26 + ascii - &H40 '前の値を桁上がりさせる。ASCIIを1~26の数値に変換して加算
ElseIf &H61 <= ascii And ascii <= &H7A Then 'アルファベットの小文字ならば
L2N = L2N * 26 + ascii - &H60 '前の値を桁上がりさせる。ASCIIを1~26の数値に変換して加算
Else 'アルファベットでなければ
L2N = 0 '戻値を0にする
Exit For 'forを抜ける
End If
Next
End If
End Function