(Gスプレッドシート)SEQUENCE関数の使い方

 Googleスプレッドシートで連番を生成することができるSEQUENCE関数の使い方についてです。

  • SEQUENCE関数により任意の開始値、増分量を持った連番(数列)を生成することができます。
  • 連続する日付の生成も可能です。
  • 他の関数と組み合わせることで、多数の処理を一括して行うループ処理的な動作を実現できます。

機能と構文

 SEQUENCE関数の機能は簡単に言って「連番(数列)を生成する」というものです。単純な1,2,3……という連番だけではなく開始値(初期値)や増分量(差分)を指定することが可能です。
 構文は次のとおりです。

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

 第1引数の行数のみ必須で、他の引数はいずれも省略すると1とみなされます。
 行数だけ指定すると「1,2,3…」という連番が縦1列に並んで出力されます。列数を指定すると横に並ぶ連番や行列状(複数行複数列)の連番を出力できます。
 開始値は連番の一番最初の値で、増分量は値どうしの増分(差分)です。開始値や増分量には0やマイナスの値も指定できますが、小数を指定すると小数部分が切り捨てられます。つまりSEQUENCE関数で直接出力できるのは整数だけです。

基本的な使用例

 もっとも単純な使用例です。
 B2セルに「=SEQUENCE(5)」と入力したところですが、これだけで1から5の整数が縦に並んで表示されました。



 こちらは列数を指定して「=SEQUENCE(1,5)」と入力した例です。
 行数1、列数5の連番という意味になりますので連番が横に並びます。



 すべての引数を指定して「=SEQUENCE(4,3,5,2)」とした例です。
 つまり行数4、列数3、開始値5、増分量2の連番です。
 連番は横方向に並んでいき、指定した列数(3)に達したら次の行に折り返されます。

 縦に並べて次の列に折り返すようにしたい場合はTRANSPOSE関数で囲めばOKですが、行数と列数が逆転するのでその点を考慮して引数を指定する必要があります。



 基本的にSEQUENCE関数で生成できるのは等差数列(増分量が一定の連番)だけですが、他の関数と組み合わせれば複雑な連番も出力できます。
 やや応用になりますが、次の画像ではLET関数と組み合わせてx2-4x+5(x=1,2,3,4,5)の値を出力しています。

 B2セル

=LET(x,SEQUENCE(5),ARRAYFORMULA(x^2-4*x+5))

 1から5の5つの値に対する一括処理ですのでARRAYFORMULAが欠かせず、これがないと最初の「2」しか出力されません。

連続する日付を生成する

 ちょっと意外な使い方ですが、第3引数(開始値)として日付(" "で囲む必要があります)を指定すれば日付のシリアル値の連番が生成されます。

 B2セル

=SEQUENCE(5,1,"2023/3/15")

 
 「" "」を忘れると「2023割る3割る15」(=44.955…)とみなされるので44から始まる連番になってしまいます。



 さらにメニューの「表示形式」→「数字」→「カスタム数字形式」を使って「yyyy/m/d」形式の日付を指定し、日付の形式で表示させた様子です。



 なお、TO_DATE関数と併用すると関数だけで日付形式にして出力させることができます。

 B2セル

=ARRAYFORMULA(TO_DATE(SEQUENCE(5,1,"2023/3/15")))

 これらの値はISDATE関数やISNUMBER関数で共にTRUEと評価される、まさに日付そのものの値となっています。
 ただしTO_DATE関数には書式を指定する機能がなく「yyyy/mm/dd」形式に固定されます。実用的にはTEXT関数で「=ARRAYFORMULA(TEXT(SEQUENCE(5,1,"2023/3/15"),"任意の書式"))」とやった方が使い勝手がよいかもしれません(この場合は日付とみなせる文字列が出力されます)。

応用例

文字列を1文字ずつ分割する

 SEQUENCE関数と他の関数を組み合わせて、複数の式を一括して実行する処理ができます。
 次の画像では、B3セルに入力されている文字列を1文字ずつ取り出して各セルに並べています。

 

=ARRAYFORMULA(MID(B3,SEQUENCE(1,5),1))

 ちょっと難しい式ですが、次の5つの式を一括して実行した同じ結果となっています。

=MID(B3,1,1)
=MID(B3,2,1)
=MID(B3,3,1)
=MID(B3,4,1)
=MID(B3,5,1)

 MID関数の第2引数を「SEQUENCE(1,5)」とすることで、1から5までの値を一括して指定しているというわけです。
 なお「SEQUENCE(5)」とすると文字は1文字ずつ縦に並びます。

その他

 非常に応用範囲の広い関数で、本サイトでも各種の利用例を紹介しています。
 以下はそのうちの一部です。最後のはやや難解ですがですがLAMBDA関数の利用例としても面白いので興味のある方はチャレンジしてみてください。

www.officeisyours.com

www.officeisyours.com

www.officeisyours.com