Excel SEQUENCE関数を再現!数式だけで連番表を作る

Excel SEQUENCE関数を再現!数式だけで連番表を作る 関数パズル・縛りプレイ

はじめに:便利な関数の「中身」を知っていますか?

Excel 2021やMicrosoft 365で登場したSEQUENCE(シーケンス)関数

皆さん使っていますか?

=SEQUENCE(行, 列, 開始, 目盛り)

たったこれだけで、好きな大きさ、好きな間隔の連番が一瞬で作れる、魔法のような関数です。

Excelの説明画像

カレンダーの日付を作ったり、テスト用のダミーデータを用意したり、あるいは複雑な配列計算のベースにしたりと、現代Excelには欠かせない存在です。

しかし!
もし明日、SEQUENCE関数がなくなってしまったら?
あるいは、Excel 2019以前の環境で作業しなければならなくなったら?

今回は、あえてこの便利な関数を使わずに、昔ながらの関数(INDIRECTやROW)だけを組み合わせて、SEQUENCE関数を完全再現してみます。

「えー、面倒くさい…」と思いましたか?

いえいえ、この「車輪の再発明」こそが、配列数式のロジックを理解する最高のトレーニングになるのです。

さあ、ノスタルジーに浸りながら、Excelの深淵を覗いてみましょう!

本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!

ステップ1:冒険の準備 – 設定値の入力

まずは、SEQUENCE関数の引数となる4つの数字を用意します。
まっさらなシートのA1セルを起点に、以下のように入力してください。

1行目(見出し): {"行","列","開始","目盛り"}
2行目(数値): {7, 8, 3, 2}

Excelの説明画像

これは、「7行 × 8列 の表を作り、3 からスタートして 2 ずつ増える連番を作る」という設定です。

ステップ2:ネームマネージャーで数式を美しく

今回の数式は少し長くなるので、そのままセル番地(A2, B2…)を使うと、「何が何を指しているのか」が非常に分かりにくくなってしまいます。

そこで、ネームマネージャーの出番です!

【ネームマネージャーのいいところ】
セルに「名前」をつける機能です。
=$A$2*5 と書くよりも、=行*5 と書いた方が、「ああ、行数を5倍してるんだな」と一目で分かりますよね?
数式が読みやすくなるだけでなく、参照先が変わっても名前の定義だけ直せばいいので、メンテナンスも楽になります。

【設定手順】
1. 「数式」タブ → 「ネームマネージャー(名前の管理)」をクリック。

Excelの説明画像

2. 「名前を定義」ボタンを押し、以下の4つを登録します。

Excelの説明画像
  • 名前: 参照範囲:=Sheet1!$A$2
  • 名前: 参照範囲:=Sheet1!$B$2
  • 名前:開始 参照範囲:=Sheet1!$C$2
  • 名前:目盛り 参照範囲:=Sheet1!$D$2
Excelの説明画像

※順序が入れ替わることがありますが、気にしなくて大丈夫です!

これで準備完了です!

セルに 例えば、=行 と入力して「7」と出れば成功です。

Excelの説明画像

ステップ3:数式の組み立て(ロジックの解説)

いよいよ数式を作っていきます。

今回は、最新のLET関数などはあえて使わず、昔ながらの関数だけで組み上げます。

完成形の数式はこちら!

=((ROW(INDIRECT("A1:A"&行))-1)*列*目盛り)
+(TRANSPOSE(ROW(INDIRECT("A1:A"&列))-1))*目盛り+開始

「うっ…長い…」

大丈夫です!分解すれば、やっていることは小学校の算数レベルです。

この数式は、大きく「縦(行)の計算」「横(列)の計算」の2つに分かれています。

パート1:縦方向の連番を作る

ROW(INDIRECT("A1:A"&行))-1

1. "A1:A" & 行 → 行には「7」が入っているので、"A1:A7" という文字列ができます。

Excelの説明画像

2. INDIRECT("A1:A7") → 文字列を実際のセル参照に変換します。

Excelの説明画像

3. ROW(...) → その範囲の行番号を取得します。つまり {1; 2; 3; 4; 5; 6; 7} です。

Excelの説明画像

4. ... - 1 → 1を引いて、{0; 1; 2; 3; 4; 5; 6} という「0から始まる連番」にします。

Excelの説明画像

これで、縦方向のインデックス(番号)ができました。

パート2:横方向の連番を作る(ここが重要!)

TRANSPOSE(ROW(INDIRECT("A1:A"&列))-1)

1. "A1:A" & 列 → 列には「8」が入っているので、"A1:A8" になります。
2. (...) - 1 → さっきと同じく {0; 1; 2; 3; 4; 5; 6; 7} という縦の連番ができます。
3. TRANSPOSE(...) → ここがポイント!縦の連番を「横」に寝かせます。
結果:{0, 1, 2, 3, 4, 5, 6, 7}

Excelの説明画像

【なぜCOLUMN関数を使わないの?】
「横方向なら COLUMN(A1:H1) とかじゃダメなの?」と思いますよね。
しかし、COLUMN関数で動的な範囲を作るには、「8列目はH列だ」と計算して
"A1:"&"H"&"1" という文字列を作らなければなりません。つまり、ADDRESS関数等を使用する必要があります。
その点、ROW関数なら数字(A1:A8)だけで指定でき、それをTRANSPOSEで横にする方が、圧倒的にシンプルで汎用性が高いのです。

※ADDRESS関数を使用しない方法もあります。
Excel ADDRESS関数なしで列文字を生成にて紹介しているので興味ある方は是非!

パート3:算数で合体させる

縦の番号(0~6)と、横の番号(0~7)ができました。
これをどうやって「左上から右下へ続く連番」にするのでしょうか?

Excelの説明画像

考え方は次のとおりです。

「1行進むごとに、『列数(8)』ぶんだけ数字が増える」

数式全体を見てみましょう。

=((ROW(INDIRECT("A1:A"&行))-1)*列*目盛り)
+(TRANSPOSE(ROW(INDIRECT("A1:A"&列))-1))*目盛り+開始

これを、わかりやすく文字で説明すると、
=((縦番号) * 列 * 目盛り) + ((横番号) * 目盛り) + 開始

具体的な計算例:

1行目の計算(縦番号=0)
 (0 * 8 * 2) は 0 なので、横番号だけが増えていきます。
 開始(3) → 3+2 → 3+4 … と横に増えます。

2行目の計算(縦番号=1)
 (1 * 8 * 2) = 16 がベースに足されます。
 つまり、1行目の終わりの次から数字が始まります。

これらを足し合わせることで、Excelの配列計算機能(ブロードキャスト)が働き、7行8列のきれいな連番が生成されるのです!

ステップ4:動作確認!

この数式を任意のセル(例えばB5セル)に入力してみてください。

=((ROW(INDIRECT("A1:A"&行))-1)*列*目盛り)
+(TRANSPOSE(ROW(INDIRECT("A1:A"&列))-1))*目盛り+開始

3, 5, 7, 9… と始まり、ちゃんと折り返して連番になっていますね!

Excelの説明画像

A2~D2の数値を、「開始=100」「目盛り=-5(マイナス)」などに変えてみてください。

一瞬で表が再計算されるはずです。

Excelの説明画像

古いExcel(2019以前)の方は、範囲を選択して数式を入力し、Ctrl + Shift + Enter で確定するのをお忘れなく!

Excelの説明画像

まとめ:便利な関数の裏側には「ロジック」がある

たった一つの関数 SEQUENCE がやっていることを分解すると、

行番号を作る」「列番号を作る」「掛け算と足し算で座標を計算する

という、地道な計算の積み重ねであることが分かりました。

特に TRANSPOSE(ROW(...)) というテクニックは、SEQUENCE関数がない環境や、より複雑な行列計算をする際に非常に役立つ「一生モノ」の知識です。

便利な関数を使うのも良いですが、たまにはこうして「裏側の仕組み」を自作してみると、Excelの本当の面白さが見えてきますよ!

タイトルとURLをコピーしました