エクセル雑感
アルファベットの26進(ツイッターお題)

ExcelマクロVBAとエクセル関数についての私的雑感
最終更新日:2020-05-19

アルファベットの26進(ツイッターお題)


ツイッターで出されたお題をVBAで回答したものです。


AAAの値をAAB,AAC...AAZまでインクリメントし、
次のアルファベットを桁上げし、
ABA,ABC?ZZZまで計算するコードを書きたい。

お題のツイート

よくある方法

一番多い方法としては、
10進数値を26で割っていく方法で各桁を0~25の数値に変換し、
その後、0~25を"A"~"Z"に変換して作成する方法です。
文字コードは、"A"が65、そこから1ずつ増えていき、"Z"が90です。
つまり、0~25に65を加算した文字コードが"A"~"Z"になります。


文字コードを文字に変換するには、Chr関数を使います。
Chr関数は、指定した文字コードに対応する文字を示す文字列型(String)の値を返します。Chr関数 Chr(charcode) charcode 文字を特定するための長整数型(Long)の値を指定します。この引数は必ず指定します。

上記ツイートを辿ればいろいろな回答が出ています。

回答したVBAコード

他の回答者とは全く別のVBAにしてみました。

Sub main()
  Const alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Dim i, str As String
  str = "AAA": Debug.Print str
  For i = 1 To 26 * 26 * 26 - 1
    If Mid(str, 3, 1) = "Z" Then
      If Mid(str, 2, 1) = "Z" Then
        Mid(str, 1, 1) = Mid(alpha, InStr(alpha, Mid(str, 1, 1)) + 1, 1)
        Mid(str, 2, 1) = "A"
      Else
        Mid(str, 2, 1) = Mid(alpha, InStr(alpha, Mid(str, 2, 1)) + 1, 1)
      End If
      Mid(str, 3, 1) = "A"
    Else
      Mid(str, 3, 1) = Mid(alpha, InStr(alpha, Mid(str, 3, 1)) + 1, 1)
    End If
    Debug.Print str
  Next
End Sub



あえて、解説は省略します。
使用している関数等は、

Mid関数
Mid関数は、文字列から指定した文字数分の文字列を返します、バリアント型(内部処理形式StringのVariant)の値を返します。Mid関数 Mid(string,start[,length]) string 必ず指定します。文字列を取り出す、元の文字列式を指定します。
Instr関数
Instr関数は、VBAでは頻繁に使われる必須関数で、シート関数のFIND関数と同様機能のVBA関数になります。文字列の中から指定した文字列を先頭から検索し、最初に見つかった文字位置を返す文字列処理関数で、検索文字が見つからなかった場合は0を返します。
Midステートメント
Midステートメントは、文字列変数の一部を他の文字列に置き換えます。これは、VBAのステートメントで、Mid関数とは根本的に違うものです。Mid関数と誤解されがちですが、全く別物になります。Mid関数は、文字列の一部を取り出す関数ですが、Midステートメントは、文字列の一部を置換するものです。

注意点はMid関数とMidステートメントの違いです。
上記解説ページを参考に、VBAコードを読み解いてみてください。

実行結果は、以下のようにイミディエイト ウィンドウに表示されます。
AAA
AAB
・・・
AAY
AAZ
ABA
ABB
・・・
AZZ
BAA
BAB
・・・
ZZY
ZZZ



同じテーマ「エクセル雑感」の記事

エクセル関連ツイートNo2
エクセル関連ツイートNo3
エクセル関連ツイートNo4
エクセル関連ツイートNo5
ツイッターで出されたVBAのお題をやってみた
「VBAによる解析シリーズその2 カッコ」をやってみた
ツイッターのお題「CSV編集」
文字列のセルだけ結合(ツイッターのお題)
時間に関する関数の扱い方(ツイッター投稿)
アルファベットの26進(ツイッターお題)
COUNTIF関数の結果は?(ツイッターお題)


新着記事NEW ・・・新着記事一覧を見る

COUNTIF関数の結果は?(ツイッターお題)|エクセル雑感(5月30日)
エクセル&VBA オンライン講座|エクセル セミナー(5月29日)
アルファベットの26進(ツイッターお題)|エクセル雑感(5月19日)
VBAが消えてしまった!マクロが壊れて動かない!|エクセル雑感(5月8日)
時間に関する関数の扱い方(ツイッター投稿)|エクセル雑感(5月6日)
文字列のセルだけ結合(ツイッターのお題)|エクセル雑感(5月5日)
表示形式.言語設定|エクセル入門(5月1日)
GoogleスプレッドシートをExcelにインポートする|VBAサンプル集(4月28日)
ツイッターのお題「CSV編集」|エクセル雑感(4月25日)
プログレスバーを自作する|ユーザーフォーム入門(4月18日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ