ExcelのMAKEARRAY関数の使い方|LAMBDAで配列を自由に生成する

スポンサーリンク
  1. ExcelのMAKEARRAY関数とは?LAMBDAで配列を自由生成
    1. LAMBDA関数の基本をおさらい
    2. 対応バージョン
    3. MAKEARRAYが活躍する代表シーン
  2. MAKEARRAY関数の書式と引数の渡し方(rows・cols・lambda)
    1. 基本構文
    2. 引数の詳細
    3. LAMBDAに渡す2つの仮引数(r・c)
    4. r・c の値がどう動くか
    5. 結果は動的配列としてスピルする
  3. MAKEARRAY関数の使い方①|基本的な配列生成(定数・連番)
    1. 例1:定数で埋めた配列を作る
    2. 例2:文字列で埋めた配列を作る
    3. 例3:1から始まる連番を縦に並べる
    4. 例4:通し番号(左から右、上から下)
  4. MAKEARRAY関数の使い方②|行番号・列番号を使った動的な値の生成
    1. 例1:単位行列(対角線だけ1、他は0)
    2. 例2:チェッカーボード(市松模様)
    3. 例3:座標ラベルを生成する
    4. 例4:ランダムなテストデータを生成
  5. MAKEARRAY関数の応用|実務活用例(九九表・距離行列・三角関数テーブル)
    1. 応用1:九九表を1関数で作る
    2. 応用2:単位変換テーブル(kg ⇔ ポンド)
    3. 応用3:距離行列を一発で作る
    4. 応用4:三角関数テーブル(sin / cos / tan)
    5. 応用5:複利計算テーブル
    6. 応用6:ヒートマップ用のスコア行列
  6. MAKEARRAY関数でよくあるエラーと対処法
    1. #NAME? エラー
    2. #VALUE! エラー
    3. #CALC! エラー
    4. #SPILL! エラー
    5. 「LAMBDA関数が単独で使えない」と言われる場合
  7. MAKEARRAY・SEQUENCE・MAP・BYROW/BYCOLの使い分け
    1. 全体比較表
    2. MAKEARRAY vs SEQUENCE
    3. MAKEARRAY vs MAP
    4. MAKEARRAY vs BYROW / BYCOL
    5. 使い分けフローチャート
  8. ExcelのMAKEARRAY関数 よくある質問(FAQ)
    1. Q1. MAKEARRAY関数はGoogleスプレッドシートでも使えますか?
    2. Q2. MAKEARRAYの結果を別の関数に渡せますか?
    3. Q3. LAMBDA内でセル参照(A1など)は使えますか?
    4. Q4. MAKEARRAYで作った配列を値として固定したいときは?
    5. Q5. なぜLAMBDAの仮引数は2つ固定なのですか?
    6. Q6. 配列のサイズを動的に変えられますか?
  9. まとめ

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関数

rowscols に小数や0以下の値を指定するとエラーになります。整数の正数を渡すのが鉄則です。

LAMBDAに渡す2つの仮引数(r・c)

MAKEARRAYに渡すLAMBDA関数には、必ず2つの仮引数を定義します。1つ目に行番号、2つ目に列番号が渡されます。名前は自由です。

=MAKEARRAY(2, 2, LAMBDA(行, 列, 行*10+列))

rc でなくとも のような日本語名でも問題ありません。慣習として r(row)と c(col)が使われます。本記事でも以降は rc で統一します。

r・c の値がどう動くか

行番号 r と列番号 c はどちらも「1」から始まります。たとえば3行2列の配列では、各セルに次のように値が渡されます。

 列1 (c=1)列2 (c=2)
行1r=1, c=1r=1, c=2
行2r=2, c=1r=2, c=2
行3r=3, c=1r=3, c=2

この rc を計算式の中で使い、各セルの値を組み立てます。ここが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の中で rc を使わず、固定値の 0 を返しています。出力は次のようになります。

0000
0000
0000

テンプレートの初期値や、条件付き書式を適用するためのキャンバスとして便利です。

例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))

出力は次のようになります。

1234
5678
9101112

「(行番号-1)×1行あたりの列数+列番号」が通し番号の定石パターンです。

MAKEARRAY関数の使い方②|行番号・列番号を使った動的な値の生成

LAMBDA内で rc を組み合わせると、より動的な配列を作れます。実用度の高いパターンを4つ紹介します。

例1:単位行列(対角線だけ1、他は0)

線形代数で出てくる単位行列は、対角線(行番号=列番号)だけが1の正方行列です。IF関数と組み合わせれば1行で書けます。

=MAKEARRAY(5, 5, LAMBDA(r, c, IF(r=c, 1, 0)))

出力結果は次のとおりです。

10000
01000
00100
00010
00001

統計分析や行列演算のテンプレートとして使えます。

例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 は「相対参照」を意味します。出力は次のようになります。

A1B1C1D1E1
A2B2C2D2E2
A3B3C3D3E3
A4B4C4D4E4
A5B5C5D5E5

例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))

出力結果(一部)は次のとおりです。

123456789
24681012141618
369121518212427

LAMBDA内の r*cr+c に変えれば「足し算表」、r^c にすれば「累乗表」も作れます。

応用2:単位変換テーブル(kg ⇔ ポンド)

縦方向にkg、横方向に変換係数を並べた変換テーブルも簡単に作れます。

=MAKEARRAY(10, 2, LAMBDA(r, c, IF(c=1, r, ROUND(r*2.20462, 2))))

出力は次のとおりです。

kgポンド
12.20
24.41
36.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…という具合に並びます。

010203040
100102030
201001020
302010010
403020100

シミュレーションや配送計画のたたき台に使えます。

応用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値
00.0000
100.1736
200.3420
300.5000

SINCOSTAN を切り替えるだけで他の三角関数テーブルも作れます。

応用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%
1101.00102.00103.00104.00105.00
2102.01104.04106.09108.16110.25
3103.03106.12109.27112.49115.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つ

対処は次のとおりです。

  • rows cols は1以上の整数を指定
  • LAMBDAの仮引数は必ず2つ
  • 文字列や論理値を rows cols に渡さない

#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

両者ともゼロから配列を作りますが、得意分野が異なります。

比較項目MAKEARRAYSEQUENCE
生成方法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で同じことをしようとすると回りくどくなりがちです。

使い分けフローチャート

迷ったら次の順で考えます。

  1. 既存配列を加工したい? → Yes:MAP / BYROW / BYCOL / SCAN / REDUCE
  2. ゼロから等差数列を作りたい? → Yes:SEQUENCE
  3. ゼロから位置依存の計算をしたい? → 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の戻り値は通常の配列です。SUMAVERAGEMAXSORT などに直接渡せます。

=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. はい。rowscols にセル参照や式を渡せば、入力値に応じて配列サイズが変わります。

=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以降

まずは「九九表」「単位行列」「通し番号」など、シンプルな例で動かしてみてください。rc の動きが体感できれば、距離行列・三角関数表・複利計算テーブルといった応用も自然と書けるようになります。

LAMBDAヘルパー関数は単独で覚えるよりも、まとめて学ぶと違いが明確になります。MAP・BYROW・BYCOL・REDUCE・SCANと並べて使い分けの感覚を掴んでください。

関連記事:

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