「行と列の位置に応じて、計算した値で配列を作りたい」。スプレッドシートで表を作っていると、こんな場面に出くわすことがあります。
九九表やランダムデータの生成、距離行列の作成など、「行×列の計算結果で埋めた表」を手作業で作るのはかなりの手間です。
MAKEARRAY関数を使えば、行数と列数を指定して、各セルの値をLAMBDA関数で自由に計算できます。この記事では、基本から実務活用パターン、SEQUENCE関数との違いまでわかりやすく解説します。
MAKEARRAY関数とは?
MAKEARRAY関数(読み方: メイクアレイ関数)は、指定した行数×列数の配列をLAMBDA関数の計算結果で生成する関数です。「make array(配列を作る)」が名前の由来で、ゼロから計算で配列を作り出すイメージですね。
たとえば、3行×3列の九九表を作りたいとき、MAKEARRAY関数で「行番号×列番号」という計算を指定するだけで、9マスすべてが自動で埋まります。セルをひとつずつ入力する必要はありません。
MAKEARRAY関数にできることをまとめると、次のとおりです。
- 行数×列数を指定して、任意のサイズの配列を一発で生成する
- 各セルの値をLAMBDA関数の計算で自由に決められる
- LAMBDAには行番号と列番号が渡されるため、位置に応じた計算が可能
NOTE
MAKEARRAY関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、SEQUENCE関数やINDEX関数を組み合わせてください。
MAKEARRAY関数の基本構文
=MAKEARRAY(行数, 列数, LAMBDA(行, 列, 処理))
カッコの中に、生成する配列の行数・列数と、各セルに適用するLAMBDA関数を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 行数 | 必須 | 生成する配列の行数(1以上の整数) |
| 列数 | 必須 | 生成する配列の列数(1以上の整数) |
| LAMBDA(行, 列, 処理) | 必須 | 各セルに適用する関数。「行」は行番号、「列」は列番号を受け取る仮引数 |
LAMBDA関数の仮引数(上の例では「行」「列」)には好きな名前を付けられます。rとcやrowとcolでもOKです。この仮引数に行番号(1から始まる)と列番号(1から始まる)が渡されて、処理が実行されます。
LAMBDA関数のおさらい
MAKEARRAY関数を理解するには、LAMBDA関数の基本を知っておく必要があります。LAMBDA関数についてはBYCOL関数の記事で詳しく解説していますので、ここではポイントだけおさらいします。
LAMBDA関数は「自分だけの関数を作れる」関数です。引数と処理内容を自分で定義できます。
=LAMBDA(引数1, 引数2, 処理)(値1, 値2)
たとえば =LAMBDA(x, y, xy)(3, 4) と書くと、xに3、yに4が入って「34=12」が返ります。MAKEARRAY関数の中では、このLAMBDA関数に行番号と列番号が自動的に渡される仕組みです。
MAKEARRAY関数の基本的な使い方
ここでは、MAKEARRAY関数でさまざまな配列を生成する基本パターンを紹介します。
九九表を作る
MAKEARRAY関数のもっともわかりやすい例が九九表です。任意のセル(たとえばA1)に以下の数式を入力します。
=MAKEARRAY(9, 9, LAMBDA(r, c, r*c))
結果が9行×9列に展開されます。
| A | B | C | D | E | F | G | H | I | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 |
| 3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 |
1行目×1列目=1、2行目×3列目=6、9行目×9列目=81。行番号と列番号をかけ算しているだけですが、たった1つの数式で九九表が完成しますよ。
固定値で埋めた配列を作る
すべてのセルを同じ値で埋めた配列を作ることもできます。
=MAKEARRAY(3, 4, LAMBDA(r, c, 0))
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 0 | 0 |
| 3 | 0 | 0 | 0 | 0 |
3行×4列のゼロ埋め配列が生成されます。LAMBDAの処理部分でrやcを使わずに固定値を返しているだけですね。テンプレートの雛形を作りたいときに便利です。
行番号・列番号を使った計算で配列を作る
行番号と列番号を組み合わせれば、位置に応じた計算結果で配列を埋められます。
=MAKEARRAY(3, 3, LAMBDA(r, c, r + c))
| A | B | C | |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
1行1列目は1+1=2、2行3列目は2+3=5です。足し算・引き算・べき乗など、自由に計算式を組み立てられるのがMAKEARRAY関数の強みですね。
MAKEARRAY関数の実務活用パターン
パターン1: 対角線だけ1の単位行列を作る
数値分析で使う単位行列(対角成分が1、それ以外が0)をワンステップで作れます。
=MAKEARRAY(4, 4, LAMBDA(r, c, IF(r=c, 1, 0)))
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 0 |
| 2 | 0 | 1 | 0 | 0 |
| 3 | 0 | 0 | 1 | 0 |
| 4 | 0 | 0 | 0 | 1 |
行番号と列番号が同じなら1、違えば0を返しています。IF関数と組み合わせれば、条件に応じた値を配置できますよ。
パターン2: ランダムなテストデータを生成する
動作確認用のダミーデータを一括で作りたいときに便利です。
=MAKEARRAY(5, 3, LAMBDA(r, c, RANDBETWEEN(1, 100)))
5行×3列に、1から100までのランダムな整数が入ります。シートを再計算するたびに値が変わるので、固定したい場合は結果をコピーして「値のみ貼り付け」してください。
パターン3: 上三角行列を作る
行番号が列番号以下の部分だけ値を入れ、残りを空白にする上三角行列です。
=MAKEARRAY(4, 4, LAMBDA(r, c, IF(r<=c, r*c, "")))
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 1 | 2 | 3 | 4 |
| 2 | 4 | 6 | 8 | |
| 3 | 9 | 12 | ||
| 4 | 16 |
行番号が列番号以下のセルだけ計算結果を入れ、それ以外は空文字を返しています。マトリクス表の作成に応用できるパターンですよ。
パターン4: セルの値を参照して動的なサイズの配列を作る
行数や列数をセル参照にすれば、配列のサイズを動的に変えられます。
=MAKEARRAY(A1, B1, LAMBDA(r, c, r*c))
A1に5、B1に3と入力すると、5行×3列の九九表が生成されます。A1やB1の値を変えるだけで配列のサイズが自動で変わるため、可変サイズのテンプレートを作りたいときに重宝します。
パターン5: 連番に名前付きのラベルを付ける
MAKEARRAY関数の中で文字列を返すこともできます。
=MAKEARRAY(5, 1, LAMBDA(r, c, "項目"&r))
| A | |
|---|---|
| 1 | 項目1 |
| 2 | 項目2 |
| 3 | 項目3 |
| 4 | 項目4 |
| 5 | 項目5 |
「項目1」「項目2」…と連番付きのラベルが自動生成されます。列方向に展開したい場合は行数と列数を入れ替えてください。
SEQUENCE関数との違い・使い分け
MAKEARRAY関数と混同しやすいのがSEQUENCE関数です。どちらも「配列を生成する」関数ですが、生成できる配列の自由度が異なります。
| 比較項目 | MAKEARRAY関数 | SEQUENCE関数 |
|---|---|---|
| 生成方法 | LAMBDAで各セルを自由に計算 | 開始値・ステップの等差数列 |
| 引数 | 行数, 列数, LAMBDA | 行数, 列数, 開始値, ステップ |
| 柔軟性 | 各セルで異なる計算が可能 | 規則的な連番のみ |
| LAMBDA | 必須 | 不要 |
| 典型的な用途 | 九九表・単位行列・条件付き配列 | 連番・日付連番・通し番号 |
使い分けの目安はこうです。
- 規則的な連番を作りたい → SEQUENCE関数(シンプルで高速)
- 位置に応じた計算で配列を作りたい → MAKEARRAY関数(柔軟性が高い)
SEQUENCE関数で十分なケース
1, 2, 3…のような等差数列や、日付の連番ならSEQUENCE関数のほうが適しています。
=SEQUENCE(5, 1, 1, 1)
この数式は1から始まる5行の連番を返します。MAKEARRAY関数でも =MAKEARRAY(5, 1, LAMBDA(r, c, r)) と書けば同じ結果になりますが、SEQUENCE関数のほうが簡潔ですよね。
MAKEARRAY関数でないとできないケース
九九表のように「行番号×列番号」で値を決めたい場合や、条件に応じてセルの値を変えたい場合は、MAKEARRAY関数の出番です。
=MAKEARRAY(5, 5, LAMBDA(r, c, IF(r=c, "X", "-")))
この数式は対角線に「X」、それ以外に「-」を入れた5×5のマトリクスを返します。SEQUENCE関数にはこうした条件分岐の機能がないため、MAKEARRAY関数が必要になります。
TIP
「連番ならSEQUENCE、計算ならMAKEARRAY」と覚えておくと迷いません。迷ったときは、LAMBDAの中で行番号・列番号を使った計算が必要かどうかで判断してください。
LAMBDA系関数の全体像
スプレッドシートには、LAMBDA関数と組み合わせて使う関数が複数あります。全体像を把握しておくと、どの場面でどの関数を使うか判断しやすくなりますよ。
| 関数 | 処理単位 | 結果の形 | 主な用途 |
|---|---|---|---|
| BYCOL | 列ごと | 横1行 | 列ごとの集計 |
| BYROW | 行ごと | 縦1列 | 行ごとの集計 |
| MAP | セルごと | 元と同じ形 | セルごとの変換・加工 |
| REDUCE | 配列全体 | 1つの値 | 全体を1つに集約 |
| SCAN | 累積 | 縦1列 | 累積計算の中間結果 |
| MAKEARRAY | 行×列 | 新しい配列 | 計算で配列を生成 |
MAKEARRAY関数は他の5関数と性質が異なります。BYCOL・BYROW・MAP・REDUCE・SCANが「既存のデータに処理を適用する」のに対し、MAKEARRAY関数は「ゼロからデータを生成する」関数です。そのぶん用途が明確で、「配列を計算で作りたい」ときはMAKEARRAY一択ですよ。
よくあるエラーと対処法
MAKEARRAY関数はLAMBDA関数と組み合わせるため、構文のミスが起こりやすいです。
| エラー | 原因 | 対処法 |
|---|---|---|
#NAME? | 関数名のスペルミス | 「MAKEARRAY」のスペルを確認してください |
#NAME? | Excelで使用しようとした | MAKEARRAY関数はGoogleスプレッドシート専用です |
#NAME? | LAMBDA関数の仮引数名が不正 | 仮引数名にセル参照(A1等)やスペースは使えません |
#VALUE! | LAMBDAの引数が2つでない | MAKEARRAY関数のLAMBDAは行番号と列番号の2つの仮引数が必要です |
#ERROR! | 行数または列数が0以下 | 行数・列数には1以上の整数を指定してください |
#REF! | 出力先のセルにデータがある | 結果が展開されるため、出力先の周囲のセルを空にしてください |
特に多いのが「LAMBDAの引数が2つでない」エラーです。BYCOL関数やBYROW関数のLAMBDAは仮引数が1つですが、MAKEARRAY関数では行番号と列番号の2つが必要です。LAMBDA(r, c, r*c) のように必ず2つの仮引数を指定してくださいね。
TIP
LAMBDA関数の仮引数名で迷ったら、
r(row の略)とc(column の略)を使うのがおすすめです。BYCOL関数ではcol、BYROW関数ではrowを使うと、どの関数を使っているか一目でわかります。
まとめ
MAKEARRAY関数は、指定した行数×列数の配列をLAMBDA関数の計算結果で生成する関数です。位置に応じた自由な計算ができるので、九九表・単位行列・条件付きマトリクスなどを一発で作成できます。
この記事のポイントをおさらいしておきましょう。
- MAKEARRAY関数は
=MAKEARRAY(行数, 列数, LAMBDA(r, c, 処理))で、計算結果の配列を生成する - LAMBDAの仮引数には行番号と列番号が渡されるため、位置に応じた計算が可能
- 連番の生成ならSEQUENCE関数のほうがシンプル。計算が必要な配列にはMAKEARRAY関数を使う
- LAMBDAの仮引数は必ず2つ(行番号と列番号)を指定する
- Googleスプレッドシート独自の関数で、Excelでは使えない
まずは=MAKEARRAY(9, 9, LAMBDA(r, c, r*c))の九九表から試してみてください。一度使い方を覚えれば、IF関数やRANDBETWEEN関数と組み合わせて、さまざまな配列を自在に生成できますよ。
