ExcelでLAMBDAやBYROWを触ってみたものの、「MAP関数って結局何が便利なの?」と感じていませんか。BYROWと似ているようで、実は役割がまったく違います。
「行ごとの合計ならBYROWでいいけど、セル単位で値を変換したいときはどう書けばいいんだろう?」——これはMAP関数の出番です。公式ドキュメントだけでは違いが分かりづらく、どちらを使うべきか迷う方も多いはずです。
この記事では、ExcelのMAP関数の使い方を構文から実務例まで中級者向けに解説します。BYROW・BYCOL・REDUCEとの違いを3軸で整理し、「セル単位変換ならMAP、行単位集計ならBYROW」という判断基準を明確にします。読み終わるころには、LAMBDAヘルパー関数グループを自信を持って使い分けられるようになります。
MAP関数とは?
MAP関数は「マップ」と読みます。英語の”map”はプログラミング用語で「配列の各要素に関数を適用する操作」を意味し、Excel関数名もこの概念から命名されています。
ExcelのMAP関数は、配列の各セルにLAMBDAを適用し、同じサイズの新しい配列を返す関数です。LAMBDA(無名関数を定義するためのExcel関数)と組み合わせて使います。Microsoft 365で導入されたLAMBDAヘルパー関数の1つで、セル単位の一括変換を1つの数式で実現できます。
たとえばA1:C2の6セルすべてを二乗したい場合、通常はD1にセル参照の数式を書いてコピーする必要があります。MAPを使えば、1つの数式で6セル分の計算結果をスピル(自動展開)できます。これがMAPの最大の魅力です。
ポイントは「入力配列と出力配列のサイズが同じ」という性質です。行数も列数も変わらず、各セルの値だけが変換されます。この性質が、BYROWやBYCOLとの決定的な違いになります。
LAMBDAヘルパー関数グループとは
LAMBDAヘルパー関数とは、LAMBDA関数と組み合わせて使う前提で設計された関数群の総称です。具体的には以下の6つが該当します。
- MAP:各セルにLAMBDAを適用して変換
- BYROW:行ごとにLAMBDAを適用して集計
- BYCOL:列ごとにLAMBDAを適用して集計
- REDUCE:配列全体を1つの値に集約
- SCAN:累積計算の途中経過をすべて返す
- MAKEARRAY:指定したサイズの配列をゼロから生成
これらは2022年頃にExcel Microsoft 365とGoogleスプレッドシートの両方で導入されました。LAMBDA関数の基本を押さえておくと理解が早いので、初めての方は先にLAMBDA関数の基本記事を読んでおくとスムーズです。
BYROW・BYCOL・REDUCEとの違いを3軸比較表で整理
MAPを正しく使い分けるには、似た仲間であるBYROW・BYCOL・REDUCEとの違いを把握することが近道です。下の表では「目的」「処理単位」「戻り値の形」の3軸で整理しました。
| 関数 | 目的 | 処理単位 | 戻り値の形 |
|---|---|---|---|
| MAP | セルごとに変換 | 1セル | 入力と同じサイズ |
| BYROW | 行ごとに集計 | 1行 | N行×1列(縦1列) |
| BYCOL | 列ごとに集計 | 1列 | 1行×N列(横1行) |
| REDUCE | 全体を1値に集約 | 配列全体 | 単一の値 |
この表をざっくり覚えておけば、「セル単位の変換か、行や列の集計か、全体の集約か」という観点で瞬時に判断できます。特にMAPだけはサイズが変わらない点を意識してください。行単位の集計についてはBYROW関数の記事、列単位の集計についてはBYCOL関数の記事で詳しく解説しています。
MAP関数の書き方(構文と引数)
ここからはMAP関数の具体的な構文を見ていきましょう。引数の順番と役割を理解すれば、使い回しが効くようになります。
基本構文
MAP関数の公式な構文は以下のとおりです。
=MAP(配列1, [配列2, ...], LAMBDA(変数1, [変数2, ...], 計算式))
一見複雑に見えますが、やっていることはシンプルです。配列を1つ以上渡し、最後の引数でLAMBDAを使って「各セルに何をするか」を定義するだけです。最もシンプルな例を見てみましょう。
=MAP(A1:A5, LAMBDA(x, x*2))
この数式は、A1:A5の各セルの値を2倍にした新しい配列を返します。xといった変数名はLAMBDA内で自由に命名できます。
引数の詳細
引数の意味を整理すると次のとおりです。
- 配列1(必須):変換したい1つ目の配列。範囲やテーブル列を指定します
- 配列2, …(任意):複数配列を扱う場合に追加。すべて同じサイズである必要があります
- LAMBDA(必須):最後の引数。配列の数と同じ個数の変数を受け取り、計算式を定義します
重要なルールが2つあります。LAMBDAは必ず最後の引数でなければなりません。また、配列の個数とLAMBDAの変数の個数は必ず一致させてください。不一致の場合は#VALUE!エラーが発生します。
BYROW・BYCOLとの構文の違い
BYROWやBYCOLとの構文の違いも確認しておきましょう。並べて見るとイメージが掴みやすくなります。
=MAP(A1:C3, LAMBDA(cell, cell*2)) // 各セルを2倍
=BYROW(A1:C3, LAMBDA(row, SUM(row))) // 各行を合計
=BYCOL(A1:C3, LAMBDA(col, SUM(col))) // 各列を合計
MAPはLAMBDAに1セルずつ渡すのに対し、BYROW・BYCOLは行や列の範囲ごと渡します。そのためLAMBDA内でSUMやAVERAGEなどの集計関数を使うのが自然です。ここが両者の大きな違いです。
MAP関数の基本的な使い方
構文が分かったところで、実際の使い方を2パターン見ていきましょう。単一配列と複数配列のケースを押さえれば、応用が効くようになります。
単一配列のセル単位変換(掛け算・条件分岐)
まずは1つの配列を変換する基本パターンです。Microsoftの公式ドキュメントで紹介されている例を見てみましょう。
=MAP(A1:C2, LAMBDA(a, IF(a>4, a*a, a)))
この数式は、A1:C2の各セルについて「4より大きければ二乗、それ以外はそのまま返す」という条件分岐を行います。2行3列の入力に対し、同じ2行3列の結果がスピルで返ります。
ポイントはLAMBDA内でIFを使っている点です。MAPのLAMBDAには任意のExcel関数が使えるので、条件分岐や関数の組み合わせも自由に書けます。単純な掛け算だけでなく、複雑な変換ロジックを1つの数式にまとめられるのが強みです。
複数配列を組み合わせる(2列を演算して新配列を作る)
MAPは複数の配列を同時に処理することもできます。公式の使用例を見てみましょう。
=MAP(TableA[Col1], TableA[Col2], LAMBDA(a, b, AND(a, b)))
この数式はテーブルの2つの列を同時に読み込み、両方がTRUEであるかを判定した新しい列を返します。LAMBDAの変数aが1列目、bが2列目の値を受け取ります。
複数配列を使うときの注意点は2つあります。まずすべての配列が同じサイズである必要があります。次にLAMBDAの変数の個数と配列の個数を必ず一致させることです。サイズが違うと#N/A、変数の個数が違うと#VALUE!が発生します。
MAP関数の実務活用例
ここからは実際の業務で使える具体例を見ていきましょう。MAP関数の真価は、日常業務の「ちょっとしたセル単位変換」を1つの数式で片付けられる点にあります。
単価×数量を1つの数式でまとめて計算
よくある売上集計のシーンです。B列に単価、C列に数量があるとき、行ごとの金額を1つの数式でまとめて計算できます。
=MAP(B2:B11, C2:C11, LAMBDA(price, qty, price*qty))
従来は=B2*C2をD列にコピーする必要がありましたが、MAPなら1つの数式で済みます。数式の編集箇所が1つに集約され、メンテナンス性が大きく向上します。
さらに消費税込みの金額を返したい場合も、LAMBDA内で調整するだけです。LAMBDA(price, qty, priceqty1.1)のように書けば、10%の税込み価格を一括計算できます。
文字列の条件変換(フラグ付与)
文字列操作にもMAPは強力です。たとえばA列のステータスに応じて「対応要」「保留」「完了」といったラベルを付けたい場合を考えます。
=MAP(A2:A20, LAMBDA(s, IF(s="NG", "対応要", IF(s="保留", "保留", "完了"))))
この数式はA列の各セルを読み取り、条件に応じてラベル文字列を返します。結果はA2:A20と同じサイズの配列としてスピルされるため、ラベル列を別途手動で埋める必要がありません。
特にデータクレンジングや前処理のフェーズで威力を発揮します。元データを触らずに変換後の値を別の位置に表示できるので、監査対応にも便利です。
IFとの組み合わせ
MAPとIFは相性がよく、条件分岐を含む変換が頻繁に登場します。たとえば閾値に応じて変換ルールを切り替えたい場合はこのように書けます。
=MAP(A1:C2, LAMBDA(a, IF(a>4, a*a, a*2)))
この数式は、4より大きい値は二乗、それ以下は2倍というルールで変換します。閾値や計算式を変えるだけで、さまざまなビジネスロジックに応用できます。
もう一歩進んで、FILTERと組み合わせれば複数条件の絞り込みも実現できます。
=FILTER(D2:E11, MAP(D2:D11, E2:E11, LAMBDA(s, c, AND(s="Large", c="Red"))))
この数式はD列が「Large」かつE列が「Red」の行だけを抽出します。MAPがTRUE/FALSEの配列を作り、FILTERの条件として機能する仕組みです。
BYROWとMAPはどちらを使うべきか?
この記事の核心部分です。「BYROWとMAP、結局どちらを使うべき?」という問いに、明確な答えを出しておきます。
行単位集計 vs セル単位変換
答えはシンプルです。行ごとに1つの値へ集計したいならBYROW、セル単位で値を変換したいならMAPです。
たとえばB:D列に売上3ヶ月分があり「各行の3ヶ月合計」を出したいなら、行単位集計なのでBYROWです。
=BYROW(B2:D11, LAMBDA(row, SUM(row)))
結果は10行×1列の縦1列として返ります。一方「各セルを税込み価格に変換したい」なら、セル単位変換なのでMAPです。
=MAP(B2:D11, LAMBDA(cell, cell*1.1))
結果は10行×3列と、入力と同じサイズで返ります。戻り値の形が違うので、後続の数式やレイアウトにも影響します。
判断フローチャート
迷ったときは以下の順で判断すると確実です。
- 出力のサイズを考える:入力と同じ形にしたい → MAP/縦1列にしたい → BYROW/横1行にしたい → BYCOL/1つの値にしたい → REDUCE
- 処理単位を考える:1セルずつ → MAP/1行まとめて → BYROW/1列まとめて → BYCOL
- LAMBDAに集計関数を使うか:使わない → MAPの可能性が高い/SUM・AVERAGEなどを使う → BYROWやBYCOLの可能性が高い
この3ステップで大半の迷いは解消します。「戻り値の形」から逆算して考えるとミスが減ります。
よくあるエラーと対処法
MAP関数を使い始めると、いくつかのエラーに遭遇することがあります。公式ドキュメントに明記されているエラーを中心に、対処法をまとめました。
#SPILL!エラー
#SPILL!はスピル範囲に障害物があるときに発生します。MAPは入力と同じサイズの配列を返すため、出力先のセルが他の値で埋まっているとこのエラーになります。
対処法はシンプルで、スピル先のセルを空けるだけです。数式を入れたセルの下や右に余計な値が残っていないか確認しましょう。
#VALUE!エラー
#VALUE!はLAMBDAの書き方が正しくないときに発生します。公式ドキュメントでは「Incorrect Parameters(パラメータ数不正)」として説明されています。
よくある原因は、配列の個数とLAMBDAの変数の個数が一致していないケースです。たとえば=MAP(A1:A5, B1:B5, LAMBDA(a, a2))のように、配列が2つなのに変数が1つだとエラーになります。正しくはLAMBDA(a, b, ab)のように変数を2つ書きます。
また#CALC!エラーが出る場合は、LAMBDA内部が配列を返してしまっているケースです。MAPのLAMBDAは「1セルにつき1つの値」を返す必要があります。
#N/Aエラー(複数配列のサイズ不一致)
#N/Aは複数配列のサイズが異なるときに、不一致のセルで発生します。たとえば=MAP(A1:A10, B1:B8, LAMBDA(a, b, a+b))のように行数が違うと、9行目と10行目が#N/Aになります。
対処法は、すべての配列をまったく同じサイズに揃えることです。範囲選択時にはセルの行数・列数を必ず確認しましょう。
なお#NAME?エラーが出る場合は、お使いのExcelがMAP関数に対応していない可能性が高いです。MAP関数が使えるのはExcel Microsoft 365・Excel for the web・Excel 2024です。Excel 2021以前は非対応です。
Google スプレッドシートのMAP関数との違い
GoogleスプレッドシートにもMAP関数があり、構文はExcelとほぼ同一です。=MAP(配列1, LAMBDA(x, 計算式))という基本形はそのまま通用します。複数配列への対応も同様です。
主な違いは2点あります。1つはスピルの扱いです。Excel版はテーブル内でスピル系関数が使えないという制約がありますが、Sheets版にはこの制約がなく#SPILL!も発生しにくい傾向があります。
もう1つは関連エコシステムの違いです。Sheets版はArrayFormulaとの組み合わせなど、スプレッドシート独自の配列処理との相互作用があります。両ツールを併用している方は、スプレッドシート版MAP関数の記事と読み比べると理解が深まります。
基本的な思想は同じなので、Excelで覚えた使い方はSheetsでもほぼそのまま通用します。LAMBDAヘルパー関数はクラウド時代の表計算の共通語だと考えてよいでしょう。
まとめ
ExcelのMAP関数は、配列の各セルにLAMBDAを適用して同じサイズの新しい配列を返す関数です。セル単位の一括変換を1つの数式で実現できる点が最大の魅力です。
この記事のポイントを振り返ります。
- 構文:
=MAP(配列1, [配列2, ...], LAMBDA(変数1, [変数2, ...], 計算式))。LAMBDAは必ず最後の引数 - 戻り値:入力配列と同じサイズ。MAPだけはサイズが縮まない
- 使い分け:セル単位変換ならMAP、行単位集計ならBYROW、列単位集計ならBYCOL、全体集約ならREDUCE
- 対応バージョン:Microsoft 365 / Excel for the web / Excel 2024。Excel 2021以前は非対応
- よくあるエラー:
#VALUE!(変数の個数不一致)、#N/A(配列サイズ不一致)、#NAME?(バージョン非対応)、#SPILL!(スピル範囲障害)
「BYROWとMAPどちらを使うべきか?」に迷ったら、出力の形から逆算して判断してください。入力と同じ形にしたいならMAP、縦1列にしたいならBYROWです。この判断軸を覚えておけば、LAMBDAヘルパー関数を自在に使いこなせます。
LAMBDA関数の基本をさらに学びたい方はLAMBDA関数の解説記事を、行や列の集計を深掘りしたい方はBYROW・BYCOLの記事もあわせてご覧ください。LAMBDAヘルパー関数クラスター全体を押さえれば、Excelの配列処理は一段上のレベルに到達します。
