スプレッドシートロゴ

SEQUENCE関数で連番生成 + 応用例 (文字列の場合)

こんにちは。テックブログの萱場です。

今回は、海外のZIPコードに関して、データ作成するときに便利だったSEQUENCE関数を紹介します。

課題

DHLの遠隔地扱いされるZIPコード一覧(PDF)よりデータリスト(アメリカ)を作成しようと思いました。PDFのエクセル化などは、アクロバットを使って行い、該当部分をスプシにコピペして、FLATTEN関数で1行にしました。

これで終われば、話は単純なのですが、PDFのリストには、以下のような表記も含まれていました。

このような、連番の省略形が3400行以上あったので、どうにかならないかと言うのが今回の課題です。

前準備

前準備としてSPLIT関数で、最初の数字と最後の数字を独立したセルに分割しました。

独立したセルにすると、文字列として認識されないので、先頭の0は消えますが、今回の場合、最終的にできたリストを5ケタの数字で0で桁埋めして、再度文字列化すれば良いので、無視します。

SEQUENCE関数を使用する

上記の画像でいうと、22行目のB列とC列にそれぞれ、連番の最初の数字と最後の数字を入力することができました。

ここでSEQUENCE関数を使用します。

書式

SEQUENCE(行数, [列数], [開始値], [増分量])

各パラメーターの説明

行数

関数で作成されるグリッドの行数です。

列数 – [任意]

関数で作成されるグリッドの列数です。省略するとグリッドは 1 列になります。

開始値 – [任意]

数列の開始値です。省略すると数列は 1 から始まります。

増分量 – [任意]

数列内の各値の増分量です。省略すると各値の増分量は 1 になります。

公式ドキュメント

再掲

今回の場合、連番を横展開したいので、行は1を指定します。

列の数が C列の値 – B列の値 + 1 になります。

開始値はB列の値になります。

増分量は、今回の場合、省略可です。

上記を元に関数を入力すると以下の様になります。

D、E列に連番が生成されています。

こちらの例でも、D列から、H列まで連番が生成されているのがわかります。

こんな感じで連番生成できました。

応用 文字列を含む場合

アメリカのZIPCODEは、数字だけだったので、良かったですが、以下のカナダのZIPCODEは、また厄介でした。

アルファベットを含んでいます。SEQUENCE関数は、数字の連番を生成してくれるので、このままだとSEQUENCE関数は使えません。

解決法

前準備として、H列、I列にそれぞれ連番の始まりの値と終わりの値をSPLIT関数で、抽出しておきます。

ここで、注目するのは、連番に関して、下1ケタが数字の連番ということです。

つまり、空白を含む、左から6桁と、連番を分けて考えて後からくっつけるイメージです。そしてそのままだと、配列として連番展開されないので、ARRAYFORMULA関数のなかで上記のような関数を入力してあげると、うまく展開できそうです。

=ARRAYFORMULA(
LEFT(H54, LEN(H54) - 1)
& 
SEQUENCE(1,RIGHT(I54,1)- RIGHT(H54,1) + 1,RIGHT(H54,1))
)

わかりやすいように改行しましたが、&の前が、連番共通部分、&の後が、下1ケタを抽出してSEQUENCE関数にいれています。

応用 アルファベットの連番の場合

以下の値はカナダのZIPCODEを少しアレンジしたもので、この様に、下1桁がアルファベットならどうでしょうか?

CHAR関数や、CODE関数という、文字をユニコード化してやることもできそうですが、最初と最後の値を参照して、連番を生成するのは難しそうです。

解決法 (試したらできた)

J58セルの数式

=ARRAYFORMULA(
REPLACE(
ARRAYFORMULA(LEFT(H58, LEN(H58) - 1) & SEQUENCE(1,HLOOKUP(RIGHT(I58,1),$J$61:$Q$62,2,FALSE)- HLOOKUP(RIGHT(H58,1),$J$61:$Q$62,2,false)+1,HLOOKUP(RIGHT(H58,1),$J$61:$Q$62,2,false))),
7,
1,
HLOOKUP(RIGHT(ARRAYFORMULA( SEQUENCE(1,HLOOKUP(RIGHT(I58,1),$J$61:$Q$62,2,FALSE)- HLOOKUP(RIGHT(H58,1),$J$61:$Q$62,2,false)+1,HLOOKUP(RIGHT(H58,1),$J$61:$Q$62,2,false))),1),$J$62:$Q$63,2,false)
)
)

こんな式が長くなるなら、あまり使わないほうが良い気がしますが、1000行単位で、馴染のない連番を生成するような稀なケースがあったら使えると思います。

手順としては、

アルファベット、数字、アルファベットの相対表を作る。

HLOOKUP関数を使って、アルファベットを数字に置き換えた連番を生成する。

その連番の下1桁を、もう一度HLOOKUP関数を使って、数字からアルファベットに戻して展開する

ていう流れになります。

REPLACE関数の最後の引数である、置換後の値の部分が、ちょっとわかりにくい気がします。

最後に

最後までお読みいただきありがとうございました。

株式会社デザインXでは、アパレル業界のお客様に向けて、ECサイトや業務基幹システム(ERP)の開発・導入支援を行っております。ご興味をお持ちの方は、是非下記リンクよりお気軽にお問い合わせください。

また、株式会社デザインXでは、ソフトウェアエンジニア・社内SEなど、共に働く仲間を募集しています。テクノロジーでアパレル業界のBtoBビジネスを変えたいという熱意をお持ちの方、お待ちしております。ご興味のある方は、以下のリンクからお問い合わせください!


投稿日

カテゴリー:

投稿者:

タグ: