NumToAlpha()
AlphaToNum()
アルファベットをアルファベット順の順序数に、あるいはその逆変換を行う関数です。
"A" は 1 , "B" は 2 , … , "Z" は 26 ,
"AA" は 27 … という具合に対応しています。
Microsoft Excel
の列名と列番号の変換のために作った関数ですが、ファイル名をひとつずつズラして付けるような処理でも使えるかもしれません。
'標準モジュールに記述します。 Option Explicit Public Function AlphaToNum(s As String, Optional blnStrictCheck As Boolean = False) As Long 'アルファベットを数字に変換します ( 例: "A" → 1 , "Z" → 26 , "AA" → 27 ... ) '<引数> ' s : アルファベット(半角大文字のみ、厳密チェック時は全角、小文字の使用可) ' blnStrictCheck : 厳密なチェックを行う(小文字・全角の変換、不正な文字やオーバーフローのチェック) '<参考> ' 第2引数に True を設定すると厳密なチェックが行われます。 ' 不要な場合は省略、もしくは明示的に False を指定すると処理速度が向上します。 Dim i As Long Dim lngStrLen As Long '引数の文字列長 Dim lngRet As Long '返し値の長整数 Dim strChr As String '引数の文字から取り出した一文字 Dim strStack As String 'チェック済みの文字 Const cStringTable As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" If blnStrictCheck Then '厳密チェック部分 On Error GoTo ERR_EXIT 'オーバーフロー対策 s = StrConv(s, vbUpperCase + vbNarrow) '大文字&半角変換 For i = 1& To Len(s) '一文字ずつチェック strChr = Mid$(s, i, 1&) If InStr(1, cStringTable, strChr) > 0 Then strStack = strStack & strChr Next s = strStack 'チェックに通った文字だけで通常処理に入る End If '通常処理部分 lngStrLen = Len(s) For i = 1& To lngStrLen lngRet = lngRet + (InStr(1, cStringTable, Mid$(s, i, 1&))) * (26& ^ (lngStrLen - i)) Next AlphaToNum = lngRet Exit Function ERR_EXIT: Debug.Print Err.Description AlphaToNum = -1& End Function Public Function NumToAlpha(ByVal n As Long) As String '数字をアルファベットに変換します。 ( 例: 1 → "A" , 26 → "Z" , 27 → "AA" ... ) ' n : 数字 Dim strRet As String Const cStringTable As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" '引数が負の場合は処理中断 If n < 1& Then Exit Function '引数を 26 で割った余りを元に1文字目を得る strRet = Mid$(cStringTable, (n - 1&) Mod 26 + 1&, 1&) Do While n > 26& '26 以上の数字が残っていれば、次の文字を求める n = (n - 1&) \ 26 strRet = Mid$(cStringTable, (n - 1&) Mod 26& + 1&, 1&) & strRet Loop NumToAlpha = strRet End Function
実行例:
イミディエイトウィンドウでの実行例です。
?NumToAlpha(2) B ?NumToAlpha(721) AAS ?AlphaToNum("B") 2 ?AlphaToNum("AAS") 721 ?AlphaToNum(NumToAlpha(26)) 26