Excel VBA セルのカラムのレターを番号に変換、番号をレターに変換 | toshiのブログ

toshiのブログ

日頃、科学技術について調査していることや趣味でやっていることなどを紹介していきます。

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