数値とアルファベットのナンバリングの書き出しは、ひとまず完了、なのだが・・。
こんなツールもできる筈!。と、プログラム作成とデータベースばりに、かなりと多さの行と列をもつエクセルファイルを利用する立場からすると、数字を入れると該当する列表記を教えてくれる、或いは、列のアルファペットを入れると何列目かを教えてくれる、そんなマクロ・ツールを用意しておくと、単純な機能だが、有用なツールとして重宝するだろう。
これまで作ったツールと連携すれば、かなり便利なものができそう。

一つの数値を入れるとアルファベットナンバリングの文字列をメッセージボックスで表示するプロシージャを既に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 みさき式エクセルマクロ

あなたもスタンプをGETしよう