🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel MAP, REDUCE & BYROW — LAMBDA ヘルパーで配列をループする

|

Excel MAP, REDUCE & BYROW — LAMBDA ヘルパーで配列をループする

TL;DRMAPREDUCESCANBYROWBYCOL高階関数です。 LAMBDA を受け取り、それを配列全体に走らせます — マクロなしの For Each です。最大の落とし穴:BYROW/BYCOL の LAMBDA は 行/列ごとに 1 つの値を返さなければならず、さもないと #CALC! が出ます。 欲しい答えのでヘルパーを選びましょう。Excel 365 と 2024 以降。

=MAP(A2:A100, LAMBDA(v, IF(v<0, 0, v)))          ' 各セルを変換する
=BYROW(data, LAMBDA(row, SUM(row)))              ' 行ごとに合計 1 つ
=REDUCE(0, A2:A100, LAMBDA(acc, v, acc + v))     ' 単一の値に畳み込む

LET は変数を与えてくれました。 LAMBDA は関数を与えてくれました。ヘルパーは、 プログラミング言語の最後のピースを与えます。ループです。それぞれが LAMBDA を受け取り、 配列全体に走らせるので、For Each を書く必要はありません。各要素に何をするかを記述すれば、 あとは Excel が繰り返します。

この記事でわかること

  • 考え方の軸:これがループ — 配列に LAMBDA を食わせる
  • どのヘルパーが何をするか:MAP(変換)、REDUCE(畳み込み)、SCAN(累計)、BYROW/BYCOL(行/列ごとに 1 つの値)
  • 最大のルール:BYROW は単一の値を返さなければならない — 「行ごとの合計」での #CALC! の直し方
  • REDUCE のアキュムレータパターン — そして素の SUMIFS のほうが勝つとき

考え方の軸:これがループ

ヘルパーは 5 つあり、どんな形が出てくるかできれいに分かれます:

  • MAP各要素を変換 → 入力と同じ形の配列(10 セル入れたら 10 セル出る)。
  • REDUCE — 配列全体を1 つの値畳み込む(合計、連結、最大などを運ぶアキュムレータ)。
  • SCAN — REDUCE と同じだが、途中のステップをすべて残す → 列に沿ってスピルする累計。
  • BYROW / BYCOL各行(または各列)まるごとに LAMBDA を走らせる → 行(または列)ごとに 1 つの値

出力の形 — 同じ形、1 つの値、すべてのステップ、行ごとに 1 つ — で並べてしまえば、正しい ヘルパーを選ぶのは当てずっぽうではなくなります。

コピペで使えるパターン

MAP — すべての要素に変換を適用する:

=MAP(A2:A100, LAMBDA(v, IF(v<0, 0, v)))

REDUCE — 配列を単一の値に煮詰める(アキュムレータ acc が結果を前へ運ぶ):

=REDUCE(0, A2:A100, LAMBDA(acc, v, acc + v))

SCAN — 同じ考え方だが、各ステップをスピルする(累計):

=SCAN(0, A2:A100, LAMBDA(acc, v, acc + v))

BYROW — 行ごとに 1 つの値(ここでは各行の最大値):

=BYROW(A2:D100, LAMBDA(row, MAX(row)))

BYROW を壊すルール:行ごとに 1 つの値を返す

これは多くの人が間違えるヘルパーで、症状は #CALC! です。BYROW(や BYCOL)に渡す LAMBDA は、各行ごとに単一の値を返さなければなりません — 数値、文字列、セル 1 つ。配列を 返すと BYROW はそれを収められず、#CALC! を投げます。

=BYROW(data, LAMBDA(row, SUM(row)))      ' 行ごとに数値 1 つ -> 動く
=BYROW(data, LAMBDA(row, row*2))         ' #CALC!  — row*2 は配列で、1 つの値ではない

この 2 つ目のケースは、実は BYROW の仕事ではなく MAP の仕事です(すべての要素を変換 する)。間違いは逆向きにも起こります。*「行ごとの合計」*を出そうとして MAP に手を伸ばし、 どうしてもうまくいかない — MAP は要素単位で、行を集計することは決してないからです。 行ごとに 1 つの値が欲しいなら BYROW。すべてのセルを変換したいなら MAP。 出力の形が 決め手です。

REDUCE のアキュムレータ:体に染み込ませるべき唯一のパターン

REDUCE は最も強力で、最も直感に反します。原因は acc — 1 つの要素から次へと進行中の結果を 運ぶアキュムレータです。LAMBDA(acc, v, …) は*「ここまでの結果(acc)と次の値 (v)がある。新しい『ここまでの結果』を返せ」*と読みます。

  • 合計:LAMBDA(acc, v, acc + v)0 から開始
  • 連結:LAMBDA(acc, v, acc & ", " & v)"" から開始
  • 条件付きカウント:LAMBDA(acc, v, acc + (v>100))0 から開始

acc が腑に落ちれば、REDUCE は*「リストをたどって何かを積み上げる」*仕事 — ルール付きの 残高計算、独自の集計、解析ループ — をこなします。かつては VBA に追い込まれていた類の作業です。

判断のポイント:素の集計関数のほうが勝つとき

これらのヘルパーは計算エンジンの中で反復するため、非常に大きな配列では遅くなることが あります。単純な合計なら、SUM/SUMPRODUCT/SUMIFS のほうが速くてシンプルです。要素 ごとのロジックが本当に独自のときにヘルパーへ手を伸ばしましょう。組み込みの集計関数で済む ときには使いません。

やりたいこと ヘルパー 出力の形
すべての要素を変換 MAP 入力と同じ形
行ごとに 1 つの値 BYROW 結果が 1 列
列ごとに 1 つの値 BYCOL 結果が 1 行
単一の値に畳み込む REDUCE セル 1 つ
行に沿った累計 SCAN 同じ形、累積

累計の数式を 10,000 行ドラッグしているなら、それは SCAN です。行ごとに 1 つの値を出す だけのために作業列を足しているなら、それは BYROW です。ただし SUMIFS ですでに答えが 出るなら、それを使いましょう。ヘルパーは独自のロジックのためであって、集計関数を作り直す ためではありません。

ExcelMaster はどう役立つか

高階関数は現代の Excel で最も急な坂です — acc、出力の形、MAP か BYROW か — そして まさに AI コパイロットが最も時間を節約してくれるところです。 ExcelMaster は、*「各行の最大値を出して」*や *「毎月リセットする残高」*を、適切な MAP/REDUCE/BYROW の数式に変え、欲しい出力の形に 合った正しいヘルパーを選び、アキュムレータのステップを一つずつ説明します。ヘルパーが #CALC! を投げたら、MAP ではなく BYROW が必要だったかどうかを教え、そのうえで書き直して くれます。ご自身のデータで試す

よくある質問

Excel の LAMBDA ヘルパー関数とは何ですか?

MAPREDUCESCANBYROWBYCOL は高階関数です。それぞれが LAMBDA を受け取り、 配列全体に走らせます。これにより、VBA マクロを書かずに、数式の中でデータをループ — 変換、 集計、累積 — できます。

BYROW が #CALC! を返すのはなぜですか?

渡した LAMBDA が、単一の値ではなく配列を返しているからです。BYROW は行ごとに 1 つの値を 必要とします。SUM(row)MAX(row) などで行を集計してください。本当はすべての要素を変換 したいのであれば、BYROW ではなく MAP を使います。

MAP と BYROW の違いは何ですか?

MAP は要素ごとに働き、入力と同じ形の配列を返します。BYROW は行まるごとに働き、行ごとに 1 つの値を返します。すべてのセルを変換するには MAP、行ごとの合計・最大・カウントを得るには BYROW を使います。

Excel の REDUCE はどう動きますか?

REDUCE(initial, array, LAMBDA(acc, v, …)) は、アキュムレータ acc を運びながら配列を たどります。値 v ごとに新しい acc を計算します。=REDUCE(0, A2:A100, LAMBDA(acc, v, acc+v)) は範囲を合計し、"" から始めて acc & v とすれば連結します。

MAP, REDUCE, BYROW はどの Excel バージョンで使えますか?

LAMBDA ヘルパーは Excel 2024 と Microsoft 365 の Windows 版と Mac 版で使えます。 Excel 2021、2019、2016 にはありません。

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026年6月22日

関連ガイド: Excel LAMBDA · Excel LET · Excel SORT · Excel SEQUENCE