スプレッドシートのMAKEARRAY関数の使い方|計算で配列を自在に生成

スポンサーリンク

「行と列の位置に応じて、計算した値で配列を作りたい」。スプレッドシートで表を作っていると、こんな場面に出くわすことがあります。

九九表やランダムデータの生成、距離行列の作成など、「行×列の計算結果で埋めた表」を手作業で作るのはかなりの手間です。

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関数の仮引数(上の例では「行」「列」)には好きな名前を付けられます。rcrowcolでも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列に展開されます。

 ABCDEFGHI
1123456789
224681012141618
3369121518212427

1行目×1列目=1、2行目×3列目=6、9行目×9列目=81。行番号と列番号をかけ算しているだけですが、たった1つの数式で九九表が完成しますよ。

固定値で埋めた配列を作る

すべてのセルを同じ値で埋めた配列を作ることもできます。

=MAKEARRAY(3, 4, LAMBDA(r, c, 0))
 ABCD
10000
20000
30000

3行×4列のゼロ埋め配列が生成されます。LAMBDAの処理部分でrcを使わずに固定値を返しているだけですね。テンプレートの雛形を作りたいときに便利です。

行番号・列番号を使った計算で配列を作る

行番号と列番号を組み合わせれば、位置に応じた計算結果で配列を埋められます。

=MAKEARRAY(3, 3, LAMBDA(r, c, r + c))
 ABC
1234
2345
3456

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)))
 ABCD
11000
20100
30010
40001

行番号と列番号が同じなら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, "")))
 ABCD
11234
2 468
3  912
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関数と組み合わせて、さまざまな配列を自在に生成できますよ。


この記事で紹介した関数・関連記事

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