スプレッドシートで「全セルに同じ加工をしたい」場面、ありませんか? 数値の四捨五入、条件に応じたラベル付け、文字列の変換など、1つずつ数式をコピーしていくのは手間がかかります。
MAP関数を使えば、配列のすべてのセルにLAMBDA関数で処理を一括適用できます。しかも複数の配列を同時に処理できるのが、MAP関数ならではの強みです。
この記事では、MAP関数の基本から、ARRAYFORMULA関数やBYCOL・BYROW関数との違いまでわかりやすく解説します。
MAP関数とは?
MAP関数(読み方: マップ関数)は、配列やセル範囲の各セルに対してLAMBDA関数を適用する関数です。結果は元の配列と同じサイズで返ります。「map(対応づける)」が名前の由来で、各値を別の値に変換するイメージですね。
たとえば、3行x3列の売上データにMAP関数でROUND処理を適用すると、9つのセルすべてが四捨五入された値に置き換わります。元の表と同じ形のまま一括で変換できるのがポイントです。
MAP関数にできることをまとめると、次のとおりです。
- 各セルに同じ処理(四捨五入、条件分岐、文字変換など)を一括適用する
- LAMBDA関数で処理内容を自由にカスタマイズできる
- 複数の配列を同時に渡して、対応するセル同士を処理できる
NOTE
MAP関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、ARRAYFORMULA関数や配列数式で代用してください。
MAP関数の基本構文
=MAP(配列, LAMBDA(値, 処理))
カッコの中に、処理対象の配列と、各セルに適用するLAMBDA関数を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 処理対象のセル範囲または配列(複数指定可) |
| LAMBDA(値, 処理) | 必須 | 各セルに適用する関数。「値」は各セルを受け取る仮引数 |
LAMBDA関数の仮引数(上の例では「値」)には好きな名前を付けられます。valやvでもOKです。この仮引数に各セルのデータが1つずつ渡されて、処理が実行されます。
複数配列を渡す場合の構文はこうなります。
=MAP(配列1, 配列2, LAMBDA(値1, 値2, 処理))
配列1と配列2の同じ位置にあるセルが、それぞれ値1・値2としてLAMBDA関数に渡されます。配列は3つ以上でも指定可能です。ただし、すべての配列は同じサイズ(行数×列数)にしてください。
LAMBDA関数のおさらい
MAP関数を理解するには、LAMBDA関数の基本を知っておく必要があります。詳しくはBYCOL関数の記事で解説していますが、ここでもかんたんにおさらいしておきますね。
LAMBDA関数は「自分だけの関数を作れる」関数です。引数と処理内容を自分で定義できます。
=LAMBDA(引数, 処理)(値)
たとえば =LAMBDA(x, x2)(5) と書くと、xに5が入って「52=10」が返ります。MAP関数の中では、このLAMBDA関数に各セルの値が自動的に渡される仕組みです。
MAP関数の基本的な使い方
ここでは、売上データをMAP関数で一括変換する例を紹介します。
サンプルデータ
A1:D4に以下のデータが入っているとします。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 4月 | 5月 | 6月 | |
| 2 | 東京 | 98.7 | 120.3 | 110.5 |
| 3 | 大阪 | 82.4 | 91.8 | 85.2 |
| 4 | 名古屋 | 63.1 | 74.6 | 68.9 |
各セルを四捨五入する
B2:D4の数値を一括で四捨五入します。出力先のセル(たとえばF2)に以下の数式を入力して、Enterを押します。
=MAP(B2:D4, LAMBDA(val, ROUND(val, 0)))
結果が元の3行x3列と同じ形で返ります。
| F | G | H | |
|---|---|---|---|
| 2 | 99 | 120 | 111 |
| 3 | 82 | 92 | 85 |
| 4 | 63 | 75 | 69 |
すべてのセルがROUND関数で四捨五入されました。9つのセルに個別にROUND関数を入力する手間が省けますね。
条件分岐を一括適用する
各セルの値を条件で判定し、ラベルを付ける例です。
=MAP(B2:D4, LAMBDA(val, IF(val >= 100, "達成", "未達")))
| F | G | H | |
|---|---|---|---|
| 2 | 未達 | 達成 | 達成 |
| 3 | 未達 | 未達 | 未達 |
| 4 | 未達 | 未達 | 未達 |
IF関数と組み合わせれば、全セルに条件分岐を一括適用できます。目標達成の判定表が一発で完成です。
複数の配列を同時に処理する
MAP関数ならではの機能が、複数の配列を同時に処理できることです。
たとえば、売上データ(B2:D4)と目標データ(F2:H4)の2つの表がある場合を考えてみましょう。
=MAP(B2:D4, F2:H4, LAMBDA(actual, target, actual - target))
各セルの「売上 – 目標」の差額が一括で計算されます。2つの表の同じ位置にあるセルが、LAMBDAの引数に1つずつ渡される仕組みです。
この使い方はBYCOL関数やBYROW関数にはありません。「複数の表を突き合わせてセルごとに処理したい」場面では、MAP関数の出番ですよ。
MAP関数の実務活用パターン
パターン1: 空白セルにデフォルト値を埋める
データに空白セルが混じっているとき、一括で「0」や「-」に置き換えます。
=MAP(B2:D10, LAMBDA(val, IF(val="", 0, val)))
空白だったセルが0に置き換わり、それ以外はそのまま残ります。集計前のデータクリーニングに便利なパターンです。
パターン2: 数値にカンマ区切りの書式を適用する
大きな数値をカンマ区切りの文字列に変換します。
=MAP(B2:D10, LAMBDA(val, TEXT(val, "#,##0")))
TEXT関数と組み合わせれば、表示形式の一括変換がワンステップで完了します。
パターン3: 税込価格を一括計算する
税抜き価格の表から、税込価格の表を一発で作ります。
=MAP(B2:D10, LAMBDA(val, ROUND(val * 1.1, 0)))
消費税10%を掛けてROUND関数で整数に丸めています。価格表の更新に使えるパターンです。
パターン4: 2つの列を結合してフルネームを作る
姓(A列)と名(B列)を結合して、フルネームを作る例です。
=MAP(A2:A10, B2:B10, LAMBDA(sei, mei, sei & " " & mei))
複数配列の同時処理を使えば、姓と名を1つの列にまとめる作業が一括で片付きます。
パターン5: エラー値を安全に処理する
計算結果にエラーが含まれる可能性がある場合、エラーを別の値に置き換えます。
=MAP(B2:D10, LAMBDA(val, IFERROR(val / A2, "N/A")))
IFERROR関数を組み込めば、エラーが出たセルだけを「N/A」に置き換えられます。他のセルは正常に計算されますよ。
パターン6: 日付・テキストの一括整形
MAP関数はテキスト整形や日付変換にも活躍します。
日付フォーマットの一括変換
A列に「2026/5/1」形式の日付が入っているとき、「2026年5月1日」形式に一括変換するには次のようにします。
=MAP(A2:A20, LAMBDA(d, TEXT(d, "yyyy年m月d日")))
TEXT関数と組み合わせることで、日付の書式変換が全セル一括で完了します。元のデータを変えずに「表示用の別列」を作りたいときに便利なパターンです。
単位変換の一括処理
メートル単位の距離データをキロメートルに変換する例です。
=MAP(B2:B20, LAMBDA(m, m / 1000 & " km"))
数値変換と文字列の結合を組み合わせることで、「5000 m → 5 km」のような単位付きの表示列を一括生成できます。
部分文字列の抽出・整形
社員番号「EMP-00123」のように「EMP-」プレフィックスが不要な場合、数字部分だけを取り出せます。
=MAP(A2:A20, LAMBDA(code, VALUE(MID(code, 5, 10))))
MID関数と組み合わせて、特定の位置から文字列を切り出す処理を全セルに一括適用できます。
パターン7: MAP関数とBYCOL・BYROWの二段階活用
MAP関数とBYCOL・BYROW関数は、「変換してから集計する」という二段階処理で組み合わせることができます。
たとえば、売上データ(B2:D4)に欠損値(空白)が混じっている場合、まずMAPで空白を0に補完してから、BYCOLで列ごとに合計を出す流れです。
=BYCOL(MAP(B2:D4, LAMBDA(val, IF(val="", 0, val))), LAMBDA(col, SUM(col)))
処理の流れはこうなります。
- MAP関数が各セルを走査し、空白を0に置き換えた新しい配列を作る
- BYCOL関数がその配列を列ごとに処理してSUMを計算する
MAP単体では「セルを変換するが集計はしない」、BYCOLは「変換前の配列しか受け取れない」という制約をそれぞれ持っています。二段階にすることで、「欠損補完してから集計」「テキスト整形してから行ごとに結合」といった複雑な処理をスマートに実装できます。
同様に、BYROWと組み合わせれば「各行の最大値だけを使って行ごとに合計」なども実現できます。
=BYROW(MAP(B2:D10, LAMBDA(val, IF(val > 100, val, 0))), LAMBDA(row, SUM(row)))
この例では、100超のセルだけを残して(他は0に置き換え)、行ごとにSUMを取っています。
ARRAYFORMULA関数との違い・使い分け
MAP関数と似た機能を持つのがARRAYFORMULA関数です。どちらも「範囲に処理を一括適用する」関数ですが、得意分野が異なります。
| 比較項目 | MAP関数 | ARRAYFORMULA関数 |
|---|---|---|
| 処理の定義方法 | LAMBDA関数で自由に記述 | 既存関数をそのまま使用 |
| 複数配列の同時処理 | 対応(配列をいくつでも渡せる) | 非対応(1つの数式で処理) |
| 複雑な条件分岐 | 得意(LAMBDA内で自由に組める) | シンプルな条件のみ |
| 学習コスト | やや高い(LAMBDA関数の理解が必要) | 低い(既存関数を囲むだけ) |
| パフォーマンス | 大量データではやや遅い | 高速 |
使い分けの目安はこうです。
- 既存関数をそのまま範囲に適用したい → ARRAYFORMULA関数
- LAMBDAで複雑な処理を定義したい・複数配列を同時に処理したい → MAP関数
ARRAYFORMULA関数で書ける例
たとえば「各セルに2を掛ける」程度のシンプルな処理なら、ARRAYFORMULA関数のほうが簡潔です。
=ARRAYFORMULA(B2:D4 * 2)
MAP関数で書くと =MAP(B2:D4, LAMBDA(val, val * 2)) になります。結果は同じですが、ARRAYFORMULA関数のほうが短くて読みやすいですよね。
MAP関数でないとできない例
一方、複数の配列を突き合わせて処理するケースはMAP関数の出番です。
=MAP(B2:D4, F2:H4, LAMBDA(actual, target, IF(actual >= target, "OK", "NG")))
「売上」と「目標」の2つの表を突き合わせて、達成・未達を判定しています。ARRAYFORMULA関数でも =ARRAYFORMULA(IF(B2:D4>=F2:H4,"OK","NG")) と書けますが、LAMBDAで複雑な処理を組み立てられるのはMAP関数だけです。
BYCOL・BYROW関数との違い・使い分け
LAMBDA系関数にはBYCOL関数とBYROW関数もありますが、処理の粒度がまったく異なります。
| 比較項目 | MAP関数 | BYCOL関数 | BYROW関数 |
|---|---|---|---|
| 処理単位 | セル(1つずつ) | 列(まとめて) | 行(まとめて) |
| 結果の形 | 元の配列と同じサイズ | 横1行 | 縦1列 |
| 向いている処理 | 変換・加工 | 列ごとの集計 | 行ごとの集計 |
| LAMBDAに渡される値 | 各セルの値 | 各列全体(配列) | 各行全体(配列) |
| 複数配列の同時処理 | 対応 | 非対応 | 非対応 |
使い分けの目安はこうです。
- 各セルを個別に変換したい → MAP関数
- 列ごとにまとめて集計したい → BYCOL関数
- 行ごとにまとめて集計したい → BYROW関数
MAP関数は「セルごと」、BYCOL・BYROWは「まとめて集計」。この違いを押さえておけば迷いませんよ。
TIP
「合計や平均を出したい」ならBYCOL・BYROW関数、「各セルの値を変換・加工したい」ならMAP関数です。「集計か変換か」で選んでくださいね。
LAMBDA系関数の全体像
スプレッドシートには、LAMBDA関数と組み合わせて使う関数が複数あります。全体像を把握しておくと、どの場面でどの関数を使うか判断しやすくなりますよ。
| 関数 | 処理単位 | 結果の形 | 主な用途 |
|---|---|---|---|
| MAP | セルごと | 元と同じ形 | セルごとの変換・加工 |
| BYCOL | 列ごと | 横1行 | 列ごとの集計 |
| BYROW | 行ごと | 縦1列 | 行ごとの集計 |
| REDUCE | 配列全体 | 1つの値 | 全体を1つに集約 |
| SCAN | 累積 | 縦1列 | 累積計算の中間結果 |
| MAKEARRAY | 行×列 | 新しい配列 | 計算で配列を生成 |
MAP関数は「各セルを個別に変換する」という、最も直感的な使い方の関数です。配列処理のファーストチョイスとして覚えておくと便利ですよ。
MAP関数のネストと多段変換
MAP関数を入れ子にする
MAP関数はLAMBDA関数の処理部分に別のMAP関数を入れ子にできます。ただし、同一の配列に対して複数の変換を順番にかけたい場合は、MAP関数を重ねるよりLAMBDAの処理内に複数の関数を組み合わせるほうがシンプルです。
たとえば「空白を0に置き換えてから四捨五入する」処理を1つのMAPで書くとこうなります。
=MAP(B2:D10, LAMBDA(val, ROUND(IF(val="", 0, val), 0)))
LAMBDA関数の中にIF関数とROUND関数の両方を入れることで、2つの変換を1回のMAPで完結させています。「変換1してから変換2する」という流れは、LAMBDA内でネストして書くのが基本です。
複数配列を使った条件付きマスキング
複数配列の同時処理を使うと、「フラグ列に応じてデータを出し分ける」処理が簡潔に書けます。
A列にフラグ(1 or 0)、B列に数値データがあるとき、フラグが1のセルだけ値を表示し、0のセルは空白にするには次のように書きます。
=MAP(A2:A20, B2:B20, LAMBDA(flag, val, IF(flag=1, val, "")))
2つの配列の同じ行のデータがLAMBDAに渡されるため、「条件列」と「データ列」を突き合わせた処理がワンステップで実現できます。フラグによるデータのマスキングや、条件に応じた値の切り替えに役立つパターンです。
TIP
MAP関数の処理部分(LAMBDA内)は自由度が高く、IF・IFERROR・TEXT・ROUNDなどほぼすべての関数を組み合わせられます。「セルごとに何かしたい」と思ったら、まずMAP + LAMBDAで書けないか考えてみると、スマートな数式になることが多いですよ。
よくあるエラーと対処法
MAP関数はLAMBDA関数と組み合わせるため、構文のミスが起こりやすいです。
| エラー | 原因 | 対処法 |
|---|---|---|
#NAME? | 関数名のスペルミス | 「MAP」のスペルを確認してください |
#NAME? | Excelで使用しようとした | MAP関数はGoogleスプレッドシート専用です |
#NAME? | LAMBDA関数の仮引数名が不正 | 仮引数名にセル参照(A1等)やスペースは使えません |
#VALUE! | 複数配列のサイズが不一致 | MAP関数に複数の配列を渡す場合、すべて同じ行数×列数にしてください |
#REF! | 出力先のセルにデータがある | 結果が元の配列と同じサイズで展開されるため、出力先に十分な空きスペースを確保してください |
#ERROR! | LAMBDAの引数の数が合わない | 配列が1つならLAMBDAの仮引数も1つ、配列が2つなら仮引数も2つにしてください |
特に多いのが「複数配列のサイズ不一致」エラーです。MAP関数に複数の配列を渡すとき、たとえばB2:D4(3行3列)とF2:H5(4行3列)のように行数が違うと#VALUE!になります。範囲を揃えてから試してくださいね。
TIP
LAMBDA関数の仮引数名で迷ったら、
valやvを使うのがおすすめです。複数配列を渡すときは、aとbや、意味のある名前(actualとtargetなど)を使うと読みやすくなります。
まとめ
MAP関数は、配列の各セルにLAMBDA関数で処理を適用し、結果を元の配列と同じサイズで返す関数です。セルごとの変換・加工を一括で自動化できるので、データクリーニングや表の加工がグッと楽になります。
この記事のポイントをおさらいしておきましょう。
- MAP関数は
=MAP(配列, LAMBDA(val, 処理))で、各セルに同じ処理を一括適用する - 複数の配列を渡して、対応するセル同士を処理できるのがMAP関数ならではの強み
- シンプルな計算はARRAYFORMULA関数、LAMBDA処理や複数配列はMAP関数と使い分ける
- BYCOL・BYROW関数は集計向き、MAP関数は変換・加工向き
- Googleスプレッドシート独自の関数で、Excelでは使えない
まずは=MAP(B2:D4, LAMBDA(val, ROUND(val, 0)))のシンプルな四捨五入から試してみてください。一度使い方を覚えれば、IF関数やTEXT関数など、処理部分を入れ替えるだけでさまざまな変換に応用できますよ。
