スプレッドシートのMAP関数の使い方|各値にLAMBDA適用

スポンサーリンク

スプレッドシートで「全セルに同じ加工をしたい」場面、ありませんか? 数値の四捨五入、条件に応じたラベル付け、文字列の変換など、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関数の仮引数(上の例では「値」)には好きな名前を付けられます。valvでも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に以下のデータが入っているとします。

 ABCD
1 4月5月6月
2東京98.7120.3110.5
3大阪82.491.885.2
4名古屋63.174.668.9

各セルを四捨五入する

B2:D4の数値を一括で四捨五入します。出力先のセル(たとえばF2)に以下の数式を入力して、Enterを押します。

=MAP(B2:D4, LAMBDA(val, ROUND(val, 0)))

結果が元の3行x3列と同じ形で返ります。

 FGH
299120111
3829285
4637569

すべてのセルがROUND関数で四捨五入されました。9つのセルに個別にROUND関数を入力する手間が省けますね。

条件分岐を一括適用する

各セルの値を条件で判定し、ラベルを付ける例です。

=MAP(B2:D4, LAMBDA(val, IF(val >= 100, "達成", "未達")))
 FGH
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」に置き換えられます。他のセルは正常に計算されますよ。

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関数は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関数の仮引数名で迷ったら、valvを使うのがおすすめです。複数配列を渡すときは、abや、意味のある名前(actualtargetなど)を使うと読みやすくなります。

まとめ

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関数など、処理部分を入れ替えるだけでさまざまな変換に応用できますよ。


この記事で紹介した関数・関連記事

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