いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)アルファベットの連番を作る

 Googleスプレッドシートで、A,B,C……Z、さらにAA,AB,AC……ZZ、といったようなアルファベットの連番を生成する方法についてです。ExcelだとADDRESS関数を使って数値に対応する列番号(記号)を取得する方法がありますが、ここでは異なる方法を試してみます。

  • SEQUENCE/BASE/QUERY関数を使ってアルファベットの連番を作ることができます。

手順

AからZZまでを生成する例

 次の画像ではB2セルに式を入力して、A,B,C…と並ぶアルファベットを生成しています。

 B2セル

=QUERY(ARRAYFORMULA(BASE(SEQUENCE(36^2),36)),"WHERE NOT Col1 MATCHES '.*[0-9].*'")

 「SEQUENCE(36^2)」の部分で1~1296の連番を生成しています。そしてこれをBASE関数で36進数(0~Z)に変換することで1~100(100はZZの次)の連番に変換しています。あとはQUERY関数を使って0~9の文字を含むものを除くことで、アルファベットだけからなるA~ZZの連番が残ります。
 「36^2」を「36」にすればA~Zになりますし、「36^3」にすればA~ZZZになります(下記参照)。必要な数だけ生成する(100個出力する、など)のが難しいので、多数出力しておいて必要な部分だけコピペするといった使い方を想定しています。
 なおQUERY関数の(NOT) MATCHESを使った正規表現マッチは文字列全体にマッチしなければマッチとみなされないので「'[0-9]'」ではうまくいきません。


 そのまま下にスクロールした様子です。
 Zの次がAA,AB,AC…と続いているのがわかります。


 さらに進んで最下部です。
 702番目に「ZZ」が現れて終了となります。

AからZZZまでを生成する例

 ここでもB2セルに式を入力して、A,B,C…と並ぶアルファベットを生成しています。
 ただし計算に時間がかかるため、入力から少しの間#REFエラーが表示されると思われますので注意してください。

 B2セル

=QUERY(ARRAYFORMULA(BASE(SEQUENCE(36^3),36)),"WHERE NOT Col1 MATCHES '.*[0-9].*'")

 最初の例と異なるのは「36^2」が「36^3」になったことだけです。SEQUENCE/BASE関数により36進数で1~1000(1000はZZZの次)の連番を生成し、QUERY関数で0~9の文字を含むものを除いています。


 下にスクロールしたところです。
 ZZからさらにAAA,AAB…と続いているのがわかります。


 さらに進んで18278番目に「ZZZ」が現れて終了となります。

 繰り返しになりますがかなり重いため、再計算が生じると(途中の行を削除→再表示、など)少し待たされます。
 また、行数の限界により「ZZZZ」までは作成できないようです。