ExcelのMAKEARRAY関数とは?LAMBDAで配列を自由生成
ExcelのMAKEARRAY関数は、指定した行数と列数の配列をゼロから生成する関数です。読み方は「メイクアレイ」。名前の由来は英語の「make(作る)+ array(配列)」です。
最大の特徴は、各セルの値を自分で自由に決められる点にあります。引数にLAMBDA関数を渡し、その中で行番号と列番号に応じた計算式を書きます。九九表や単位行列、距離行列など、規則性のある配列を1つの数式で一気に生成できます。
MAKEARRAYは「LAMBDAヘルパー関数」と呼ばれるグループの1つです。仲間にはMAP関数・REDUCE関数・SCAN関数・BYROW関数・BYCOL関数があります。
これらヘルパー関数の中で、MAKEARRAYだけが異色の存在です。他の関数はすべて「既存の配列を加工する」のが役割。一方でMAKEARRAYだけが「ゼロから配列を生み出す」役割を担います。
LAMBDA関数の基本をおさらい
LAMBDA関数は、Excelに自作関数を持ち込むための仕組みです。書式は次のとおりです。
=LAMBDA(仮引数1, 仮引数2, ..., 計算式)(実引数1, 実引数2, ...)
仮引数に名前を付けて計算式の中で使えます。MAKEARRAYと組み合わせる場合は、LAMBDAを「他の関数の引数」として渡します。単独で呼び出す形にはなりません。
=MAKEARRAY(3, 3, LAMBDA(r, c, r+c))
ここではLAMBDA本体を呼び出すのはMAKEARRAYの内部処理です。利用者がカッコを付けて呼ぶ必要はありません。
対応バージョン
MAKEARRAY関数を使えるのは次の環境です。
- Microsoft 365(Windows / Mac)
- Excel 2021(永続ライセンス)
- Excel for the web
Excel 2019以前では使用できません。古いバージョンで開くと #NAME? エラーになります。
MAKEARRAYが活躍する代表シーン
- 九九表など計算式が規則的な表をテンプレートとして作る
- 単位行列・対角行列など、数学的な行列を一発で生成する
- ダミーデータ(連番・乱数)を一括生成してテスト用に使う
- 距離行列(移動コスト表)や三角関数テーブルを一気に作る
MAKEARRAY関数の書式と引数の渡し方(rows・cols・lambda)
基本構文
MAKEARRAY関数の構文は次のとおりです。
=MAKEARRAY(rows, cols, LAMBDA(r, c, 計算式))
3つの引数すべてが必須です。省略するとエラーになります。
引数の詳細
| 引数 | 必須 | データ型 | 説明 |
|---|---|---|---|
| rows | はい | 正の整数 | 生成する配列の行数(1以上) |
| cols | はい | 正の整数 | 生成する配列の列数(1以上) |
| lambda | はい | LAMBDA式 | 各セルの値を決めるLAMBDA関数 |
rows と cols に小数や0以下の値を指定するとエラーになります。整数の正数を渡すのが鉄則です。
LAMBDAに渡す2つの仮引数(r・c)
MAKEARRAYに渡すLAMBDA関数には、必ず2つの仮引数を定義します。1つ目に行番号、2つ目に列番号が渡されます。名前は自由です。
=MAKEARRAY(2, 2, LAMBDA(行, 列, 行*10+列))
r と c でなくとも 行・列 のような日本語名でも問題ありません。慣習として r(row)と c(col)が使われます。本記事でも以降は r・c で統一します。
r・c の値がどう動くか
行番号 r と列番号 c はどちらも「1」から始まります。たとえば3行2列の配列では、各セルに次のように値が渡されます。
| 列1 (c=1) | 列2 (c=2) | |
|---|---|---|
| 行1 | r=1, c=1 | r=1, c=2 |
| 行2 | r=2, c=1 | r=2, c=2 |
| 行3 | r=3, c=1 | r=3, c=2 |
この r と c を計算式の中で使い、各セルの値を組み立てます。ここがMAKEARRAYの心臓部です。
結果は動的配列としてスピルする
MAKEARRAYは動的配列関数です。1つのセルに数式を入れるだけで、結果が自動的に下方向・右方向にスピル(自動展開)します。
A1: =MAKEARRAY(3, 4, LAMBDA(r, c, r*c))
A1に上記を入れると、A1:D3の範囲に12個の値が広がります。スピル先のセルに別の値が入っていると #SPILL! エラーになります。出力範囲はあらかじめ空けておきましょう。
MAKEARRAY関数の使い方①|基本的な配列生成(定数・連番)
ここからは具体的な使い方を見ていきます。まずは「LAMBDAの中で r c を使う・使わない」の2つの基本パターンから始めます。
例1:定数で埋めた配列を作る
最もシンプルな例は、すべて同じ値で埋めた配列です。次の数式で3行4列の「0」埋め配列を生成できます。
=MAKEARRAY(3, 4, LAMBDA(r, c, 0))
LAMBDAの中で r と c を使わず、固定値の 0 を返しています。出力は次のようになります。
| 0 | 0 | 0 | 0 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 |
テンプレートの初期値や、条件付き書式を適用するためのキャンバスとして便利です。
例2:文字列で埋めた配列を作る
数値以外も入れられます。全セルを「未入力」で埋める場合は次のとおりです。
=MAKEARRAY(5, 3, LAMBDA(r, c, "未入力"))
5行3列のすべてに「未入力」という文字列が並びます。入力欄のプレースホルダーとして使えます。
例3:1から始まる連番を縦に並べる
r を使うと、行番号がそのまま値になります。1〜10の縦連番は次のとおりです。
=MAKEARRAY(10, 1, LAMBDA(r, c, r))
単純な連番だけならSEQUENCE関数のほうがシンプルです。=SEQUENCE(10) の1行で済みます。MAKEARRAYの真価は次のような「計算を伴う配列」にあります。
例4:通し番号(左から右、上から下)
3行4列に「1, 2, 3, 4 / 5, 6, 7, 8 / 9, 10, 11, 12」と通し番号を振る場合は、行番号と列番号の組み合わせで計算します。
=MAKEARRAY(3, 4, LAMBDA(r, c, (r-1)*4+c))
出力は次のようになります。
| 1 | 2 | 3 | 4 |
|---|---|---|---|
| 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 |
「(行番号-1)×1行あたりの列数+列番号」が通し番号の定石パターンです。
MAKEARRAY関数の使い方②|行番号・列番号を使った動的な値の生成
LAMBDA内で r と c を組み合わせると、より動的な配列を作れます。実用度の高いパターンを4つ紹介します。
例1:単位行列(対角線だけ1、他は0)
線形代数で出てくる単位行列は、対角線(行番号=列番号)だけが1の正方行列です。IF関数と組み合わせれば1行で書けます。
=MAKEARRAY(5, 5, LAMBDA(r, c, IF(r=c, 1, 0)))
出力結果は次のとおりです。
| 1 | 0 | 0 | 0 | 0 |
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 1 |
統計分析や行列演算のテンプレートとして使えます。
例2:チェッカーボード(市松模様)
r+c の偶奇で値を変えると、チェッカーボード状の配列ができます。
=MAKEARRAY(8, 8, LAMBDA(r, c, IF(MOD(r+c, 2)=0, "■", "□")))
8×8の市松模様が並びます。条件付き書式と組み合わせれば、配色テンプレートとしても使えます。
例3:座標ラベルを生成する
行番号と列番号を文字列として組み立てれば、座標ラベル(A1表記など)を自動生成できます。
=MAKEARRAY(5, 5, LAMBDA(r, c, ADDRESS(r, c, 4)))
ADDRESS の第3引数 4 は「相対参照」を意味します。出力は次のようになります。
| A1 | B1 | C1 | D1 | E1 |
|---|---|---|---|---|
| A2 | B2 | C2 | D2 | E2 |
| A3 | B3 | C3 | D3 | E3 |
| A4 | B4 | C4 | D4 | E4 |
| A5 | B5 | C5 | D5 | E5 |
例4:ランダムなテストデータを生成
ダミーデータが必要な場面では RANDBETWEEN と組み合わせます。
=MAKEARRAY(10, 5, LAMBDA(r, c, RANDBETWEEN(1, 100)))
10行5列の範囲に1〜100のランダム整数が一気に並びます。テスト用データセットの作成に重宝します。
RANDARRAY でも似たことができます。ただしMAKEARRAYなら、位置に応じた条件分岐を入れられます。
=MAKEARRAY(10, 5, LAMBDA(r, c, IF(c=5, RANDBETWEEN(100,200), RANDBETWEEN(1,10))))
「r行目だけは1〜10、c=5列目だけは100〜200」のような使い分けが可能です。これがMAKEARRAYの柔軟性です。
MAKEARRAY関数の応用|実務活用例(九九表・距離行列・三角関数テーブル)
ここからは、実務やデータ分析で使える応用パターンを紹介します。
応用1:九九表を1関数で作る
MAKEARRAYの定番中の定番が九九表(掛け算表)です。行番号と列番号を掛けるだけで完成します。
=MAKEARRAY(9, 9, LAMBDA(r, c, r*c))
出力結果(一部)は次のとおりです。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 |
| 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 |
| … | … | … | … | … | … | … | … | … |
LAMBDA内の r*c を r+c に変えれば「足し算表」、r^c にすれば「累乗表」も作れます。
応用2:単位変換テーブル(kg ⇔ ポンド)
縦方向にkg、横方向に変換係数を並べた変換テーブルも簡単に作れます。
=MAKEARRAY(10, 2, LAMBDA(r, c, IF(c=1, r, ROUND(r*2.20462, 2))))
出力は次のとおりです。
| kg | ポンド |
|---|---|
| 1 | 2.20 |
| 2 | 4.41 |
| 3 | 6.61 |
| … | … |
c=1 のときは行番号(kg)を返します。c=2 のときはkg×2.20462(ポンド)を返します。ヘッダー行は別途追加します。
応用3:距離行列を一発で作る
複数地点間の距離(コスト)行列も、行番号と列番号の組み合わせから生成できます。等差で配置された5地点の距離行列は次のとおりです。
=MAKEARRAY(5, 5, LAMBDA(r, c, ABS(r-c)*10))
r-c の絶対値に10kmを掛けています。対角線は0、隣り合う地点は10、2つ離れると20…という具合に並びます。
| 0 | 10 | 20 | 30 | 40 |
|---|---|---|---|---|
| 10 | 0 | 10 | 20 | 30 |
| 20 | 10 | 0 | 10 | 20 |
| 30 | 20 | 10 | 0 | 10 |
| 40 | 30 | 20 | 10 | 0 |
シミュレーションや配送計画のたたき台に使えます。
応用4:三角関数テーブル(sin / cos / tan)
角度0〜90度のsin値テーブルを10度刻みで作る例です。
=MAKEARRAY(10, 2, LAMBDA(r, c, IF(c=1, (r-1)*10, ROUND(SIN(RADIANS((r-1)*10)), 4))))
出力は次のようになります。
| 角度(度) | sin値 |
|---|---|
| 0 | 0.0000 |
| 10 | 0.1736 |
| 20 | 0.3420 |
| 30 | 0.5000 |
| … | … |
SIN・COS・TAN を切り替えるだけで他の三角関数テーブルも作れます。
応用5:複利計算テーブル
行を年数、列を金利として複利後の元利合計を一気に計算するパターンです。
=MAKEARRAY(10, 5, LAMBDA(r, c, ROUND(100*(1+c*0.01)^r, 2)))
100万円を元手に、年利1〜5%で1〜10年複利運用した結果が一発で並びます。
| 年 利率 | 1% | 2% | 3% | 4% | 5% |
|---|---|---|---|---|---|
| 1 | 101.00 | 102.00 | 103.00 | 104.00 | 105.00 |
| 2 | 102.01 | 104.04 | 106.09 | 108.16 | 110.25 |
| 3 | 103.03 | 106.12 | 109.27 | 112.49 | 115.76 |
シナリオ分析のシミュレーターとして使えます。
応用6:ヒートマップ用のスコア行列
条件付き書式と組み合わせれば、ヒートマップの素材も作れます。
=MAKEARRAY(7, 24, LAMBDA(r, c, RANDBETWEEN(0, 100)))
7日×24時間のランダムなアクセス数を生成します。セルの値で色分けすればヒートマップの完成です。実データの構造を模したテンプレ作成に重宝します。
MAKEARRAY関数でよくあるエラーと対処法
MAKEARRAYは引数の型に厳密です。よく出るエラーと対処法を整理します。
#NAME? エラー
関数名が認識されない場合に発生します。主な原因は次のとおりです。
| 原因 | 対処 |
|---|---|
| Excel 2019以前で使用 | Microsoft 365 / Excel 2021に更新 |
| 関数名のスペルミス | MAKEARRAY を正しく入力 |
| LAMBDAヘルパー未対応の旧ビルド | Officeを最新ビルドに更新 |
利用環境がMicrosoft 365でも、Officeのバージョンが古いと未対応なケースがあります。「ファイル → アカウント → 更新オプション」から最新化してください。
#VALUE! エラー
引数の型・値が不正な場合に発生します。主な原因は次のとおりです。
=MAKEARRAY(0, 5, LAMBDA(r, c, r*c)) ' rowsが0
=MAKEARRAY(3.5, 4, LAMBDA(r, c, r*c)) ' rowsが小数
=MAKEARRAY(3, 4, LAMBDA(r, r*c)) ' LAMBDA仮引数が1つ
対処は次のとおりです。
rowscolsは1以上の整数を指定- LAMBDAの仮引数は必ず2つ
- 文字列や論理値を
rowscolsに渡さない
#CALC! エラー
配列の計算が完了できない場合に発生します。MAKEARRAYで多いケースは次のとおりです。
- 配列が大きすぎてメモリ不足(数十万行など)
- LAMBDA内で自己参照や循環参照を発生させた
対処として、まずは rows cols を小さくして動作確認します。問題なければ徐々に拡大していきましょう。
#SPILL! エラー
結果のスピル先に既存の値があるとこのエラーになります。出力範囲を空けておくか、新しいシートで試してください。
「LAMBDA関数が単独で使えない」と言われる場合
MAKEARRAYの第3引数に渡すLAMBDAは、呼び出しカッコを付けません。
' 正しい例
=MAKEARRAY(3, 3, LAMBDA(r, c, r*c))
' 誤った例(LAMBDAを単独呼び出ししている)
=MAKEARRAY(3, 3, LAMBDA(r, c, r*c)(1, 1))
LAMBDA本体だけを「関数の値」として渡すのがポイントです。
MAKEARRAY・SEQUENCE・MAP・BYROW/BYCOLの使い分け
LAMBDAヘルパー系・配列生成系の関数は似て非なる関数です。役割を整理しておくと迷いません。
全体比較表
| 関数 | 入力 | 役割 | 出力サイズ | LAMBDAの仮引数 |
|---|---|---|---|---|
| MAKEARRAY | なし(rows×cols指定) | ゼロから配列を生成 | 指定サイズ | 2つ(r, c) |
| SEQUENCE | なし(rows×cols指定) | 等差数列を生成 | 指定サイズ | 不要 |
| MAP | 既存配列 | 各要素にLAMBDA適用 | 同サイズ | 1つ以上 |
| REDUCE | 既存配列 | 累積処理して1値に集約 | スカラー | 2つ(累積値, 要素) |
| SCAN | 既存配列 | 累積処理(途中結果含む) | 同サイズ | 2つ |
| BYROW | 既存配列 | 行ごとにLAMBDA適用 | 列ベクトル | 1つ(行配列) |
| BYCOL | 既存配列 | 列ごとにLAMBDA適用 | 行ベクトル | 1つ(列配列) |
MAKEARRAY vs SEQUENCE
両者ともゼロから配列を作りますが、得意分野が異なります。
| 比較項目 | MAKEARRAY | SEQUENCE |
|---|---|---|
| 生成方法 | LAMBDAで自由計算 | 等差数列(開始値+ステップ) |
| 柔軟性 | 各セルで異なる計算が可能 | 規則的な連番のみ |
| LAMBDA | 必須 | 不要 |
| 構文の複雑さ | やや複雑 | シンプル |
| 典型用途 | 九九表・単位行列・三角関数表 | 連番・日付連番・通し番号 |
判断基準:等差数列(1,2,3…)ならSEQUENCE。位置に応じた自由な計算が必要ならMAKEARRAY。この2択で判断できます。
たとえば 1, 2, 3, 4, 5 ならSEQUENCEの一発で十分です。1, 4, 9, 16, 25(平方数)はMAKEARRAYが必要です。
' 連番 → SEQUENCEが最適
=SEQUENCE(5)
' 平方数 → MAKEARRAYが最適
=MAKEARRAY(5, 1, LAMBDA(r, c, r^2))
MAKEARRAY vs MAP
MAPは「既存の配列の各要素にLAMBDAを適用する」関数です。MAKEARRAYと混同しがちですが、入力が違います。
' MAP:A2:A10の値を2倍にする
=MAP(A2:A10, LAMBDA(x, x*2))
' MAKEARRAY:1〜9の2倍を新規生成
=MAKEARRAY(9, 1, LAMBDA(r, c, r*2))
判断基準:既存のデータを加工したいならMAP。ゼロから値を生成したいならMAKEARRAY。
MAKEARRAY vs BYROW / BYCOL
BYROW / BYCOLは「既存配列を行ごと・列ごとにLAMBDAで処理する」関数です。集計に向いています。
' BYROW:各行の合計を縦に並べる
=BYROW(A2:E10, LAMBDA(行, SUM(行)))
' MAKEARRAY:行ごとに何かを生成
=MAKEARRAY(10, 1, LAMBDA(r, c, SUM(OFFSET(A2, r-1, 0, 1, 5))))
集計目的ならBYROW / BYCOLが素直で読みやすいです。MAKEARRAYで同じことをしようとすると回りくどくなりがちです。
使い分けフローチャート
迷ったら次の順で考えます。
- 既存配列を加工したい? → Yes:MAP / BYROW / BYCOL / SCAN / REDUCE
- ゼロから等差数列を作りたい? → Yes:SEQUENCE
- ゼロから位置依存の計算をしたい? → Yes:MAKEARRAY
この3問でほぼ判別できます。
ExcelのMAKEARRAY関数 よくある質問(FAQ)
Q1. MAKEARRAY関数はGoogleスプレッドシートでも使えますか?
A. 現時点では使えません。MAKEARRAYはMicrosoft 365 / Excel 2021以降の専用関数です。Googleスプレッドシートにはこれに直接対応する関数はありません。代替として ARRAYFORMULA + SEQUENCE + ROW/COLUMN の組み合わせで似たことができます。
=ARRAYFORMULA(SEQUENCE(9)*TRANSPOSE(SEQUENCE(9)))
このパターンで九九表をスプレッドシートでも作れます。
Q2. MAKEARRAYの結果を別の関数に渡せますか?
A. はい、できます。MAKEARRAYの戻り値は通常の配列です。SUM・AVERAGE・MAX・SORT などに直接渡せます。
=SUM(MAKEARRAY(10, 10, LAMBDA(r, c, r*c)))
これで「10×10の掛け算表の合計」が1つの数式で求まります。MAKEARRAYは式の途中部品としても優秀です。
Q3. LAMBDA内でセル参照(A1など)は使えますか?
A. 使えます。次のように外部のセル参照を計算式に含められます。
=MAKEARRAY(5, 5, LAMBDA(r, c, $A$1*r+c))
ただし、参照するセルが変わるたびに配列全体が再計算されます。大きな配列だとパフォーマンスに影響するため、必要最小限にとどめましょう。
Q4. MAKEARRAYで作った配列を値として固定したいときは?
A. 数式バーで F9 を押すと、計算結果が配列リテラルに置き換わります。あるいは Ctrl+C でコピーし、「形式を選択して貼り付け → 値」で値貼り付けする方法もあります。ハードコードされた値の表になるため、テンプレート化したいときに便利です。
Q5. なぜLAMBDAの仮引数は2つ固定なのですか?
A. MAKEARRAYは「行番号」と「列番号」の2つを必ず内部で渡す仕様だからです。引数が1つだけだと列番号を受け取れません。3つ以上だと余分な引数への値の渡し方が定義されていません。仮引数は必ず2個と覚えておきましょう。
なお、片方を使わない場合(例:常に固定値)でも、仮引数の宣言は省略できません。
' 仮引数cを使わなくても、宣言は必須
=MAKEARRAY(5, 5, LAMBDA(r, c, r))
Q6. 配列のサイズを動的に変えられますか?
A. はい。rows と cols にセル参照や式を渡せば、入力値に応じて配列サイズが変わります。
=MAKEARRAY($B$1, $B$2, LAMBDA(r, c, r*c))
B1とB2に入力した値で九九表のサイズが変わります。ダッシュボードの動的テンプレートに応用できます。
まとめ
ExcelのMAKEARRAY関数は、LAMBDAと組み合わせてゼロから配列を自由に生成できる強力な関数です。
ポイントを整理します。
- 構文は
=MAKEARRAY(rows, cols, LAMBDA(r, c, 計算式)) - 行番号
rと列番号cは1から始まる - LAMBDAの仮引数は必ず2つ
- 等差数列ならSEQUENCE、自由計算ならMAKEARRAY
- 既存配列の加工はMAP / BYROW / BYCOLが適任
- 対応環境はMicrosoft 365 / Excel 2021以降
まずは「九九表」「単位行列」「通し番号」など、シンプルな例で動かしてみてください。r と c の動きが体感できれば、距離行列・三角関数表・複利計算テーブルといった応用も自然と書けるようになります。
LAMBDAヘルパー関数は単独で覚えるよりも、まとめて学ぶと違いが明確になります。MAP・BYROW・BYCOL・REDUCE・SCANと並べて使い分けの感覚を掴んでください。
関連記事:
