数値とアルファベットのナンバリングの書き出しは、ひとまず完了、なのだが・・。
こんなツールもできる筈!。と、プログラム作成とデータベースばりに、かなりと多さの行と列をもつエクセルファイルを利用する立場からすると、数字を入れると該当する列表記を教えてくれる、或いは、列のアルファペットを入れると何列目かを教えてくれる、そんなマクロ・ツールを用意しておくと、単純な機能だが、有用なツールとして重宝するだろう。
これまで作ったツールと連携すれば、かなり便利なものができそう。
一つの数値を入れるとアルファベットナンバリングの文字列をメッセージボックスで表示するプロシージャを既に159号でアップしているが、まずは、この逆のプロシージャを準備する。もう少し丁寧に仕様を説明すると、インプットボックスに1~5文字のアルファベットの文字列を入れるとエクセルの何列目かが分かる数値に変換してメッセージボックスで表示するプロシージャ。いずれは黒子の駒の一つの如く、子マクロとして呼び出すことになるので、「kcr_逆引きアルファベットナンバリング対応数字表記」と一旦命名。投稿すると名前が長すぎて最小文字でも改行されてしまうことから「
kcr_逆引きαナンバリング対応数字表記」と改名。
コードはアルファベットナンバリングを作成する過程で変換の公式はシッカリと頭に入っといるから簡単にできそうだ。
アルファベットナンバリング・マクロではエクセルの最大行数1,048,576(2の20剰)に合わせて、1,048,577以上の数値入力は不可とする仕様になっていたが、この場合、最大値1,048,576に対応するアルファベット表記は「BGQCV」。連続するシリアル番号(数値 or アルファベット文字列)を1列或いは、1行に書き出すには、当然の制限機能だが、何とも消化不良のアルファベット表記の最大値。「kmr_逆引き~」のマクロでは分かり易く、A~ZZZZZまで入力計算できるものを作ることにした。
完成品は以下。
Sub kcr_逆引きαナンバリング対応数字表記()
Dim alph As String
Dim i As Long
alph = InputBox( _
"アルファベット式のナンバリングの文字列を" _
& vbCrLf & " 数字(10進法)表記に変換します。" _
& vbCrLf & vbCrLf & _
" 5文字以下のアルファベット文字列を" _
& vbCrLf & vbCrLf & _
" 入力してください。")
If Len(alph) > 5 Then
MsgBox ( _
"6文字以上の文字列が入力されました。" & _
vbCrLf & vbCrLf & _
" 処理を中止します。")
Exit Sub
End If
Dim lgth As Integer, j As Long
lgth = Len(alph)
For i = 1 To lgth
If Mid(Trim(alph), i, 1) Like "[A-z]" = False Then
MsgBox ( _
"アルファベット以外の文字が含まれるが文字列が" & _
vbCrLf & vbCrLf & _
"入力されているため、" & _
vbCrLf & vbCrLf & _
" 処理を中止します。")
Exit Sub
End If
Next
alph = UCase(alph)
Dim num As Long
For i = 1 To 26
If Right(alph, 1) = Chr(64 + i) Then
num = num + i * 26 ^ 0
Exit For
End If
Next
If lgth > 1 Then
For j = 2 To lgth
For i = 1 To 26
If Left(Right(alph, j), 1) = Chr(64 + i) Then
num = num + i * 26 ^ (j - 1)
Exit For
End If
Next
Next
End If
MsgBox (alph & " の数値ナンバリング表記は" & _
vbCrLf & vbCrLf & _
" " & num & vbCrLf & _
" です。 ")
End Sub
結構な文字数になったので、今回の投稿はここまで。次回は上記マクロの実行画面で、検証結果の報告の回とする予定。
つづく
©2017 みさき式エクセルマクロ
