エクセル入門
MAP関数(配列各値を新しい値にマッピングした配列を返す)

Excelの初心者向け入門解説
公開日:2022-10-17 最終更新日:2025-10-11

MAP関数(配列各値を新しい値にマッピングした配列を返す)


MAP関数はOffice365のExcelに2022年になってから追加された新しい関数です。
MAP関数はLAMBDAヘルパー関数(LAMBDAと一緒に使う)の一つです。


配列にLAMBDAを適用して新しい値を作成することにより、配列内の各値を新しい値にマッピング(元配列に対して異なるデータを割り当て)して形成された配列を返します。

MAP関数はLAMBDAヘルパー関数なので、LAMBDAについては別途習得してからお読みください。

LAMBDA以降の新関数について
・LAMBDA関数とLAMBDA関数を引数に指定できるヘルパー関数群 ・TEXT処理関数 ・配列操作関数群
LAMBDA関数(カスタム関数の作成)
・LAMBDA関数の構文 ・LAMBDA関数をセルで使う場合の基本 ・LAMBDA関数の「数式の検証」について ・LAMBDA関数をセルで使う場合の使用例 ・パラメーターの省略について ・LAMBDA関数を名前定義に登録 ・再帰関数の作成 ・LET関数内でLAMBDA関数を使用する ・LAMBDA関数にLAMBDA関数を渡す ・LAMBDA関数のネストと変数のスコープ(適用範囲) ・遅延評価によりLAMBDA関数オブジェクト(関数値)を返すことができる関数 ・LAMBDAヘルパー関数について


MAP関数とSCAN関数とREDUCE関数の使い分け

MAP関数、SCAN関数、REDUCE関数は一見よく似ていますが、役割はそれぞれ異なります。
この3つを区別するポイントは 「要素数が変わるかどうか」 と 「前の要素に依存するかどうか」 の2つです。
  • MAP関数は、入力リストと出力リストの行数が変わらないときに使います。各要素の処理が独立しており、他の要素に影響されない場合に最適です。
  • SCAN関数は、入力と出力の行数が変わらず、かつ各要素の処理が前の要素の結果に依存するときに使います。処理の途中経過をすべて記録したい場合に役立ちます。
  • REDUCE関数は、入力リストと出力リストの行数が変わるときに使います。リスト全体を1つの値に集約したり、条件に基づいて新しいリストを生成したりする際に用います。
  • BYROW関数は、配列の各行に同じ処理を適用し、行ごとに結果を返すときに使います。行単位での集計や変換に最適です。
  • BYCOL関数は、配列の各列に同じ処理を適用し、列ごとに結果を返すときに使います。列単位での集計や変換に最適です。
この5つの関数は、入出力の行数の変化と処理の依存性という観点と、、行ごと処理・列ごと処理で使い分けることができます。

使い分け簡易フローチャート
MAP関数、SCAN関数、REDUCE関数、BYROW関数、BYCOL関数の使い分け

まとめと使い分けの早見表
関数 目的 入力と出力の関係 処理の依存性
MAP関数 各要素の変換 入力リストと出力リストの要素数が同じ 独立 各要素を2倍にする、大文字に変換する
REDUCE関数 1つの値への集約 入力リストから単一の値 累積的(前の結果に依存) 合計、最大値、平均
SCAN関数 累積結果の履歴 入力リストと出力リストの要素数が同じ(経過リスト) 累積的(前の結果に依存) 累積和、残高の推移
BYROW関数 各行の集計・変換 入力の行数と出力の行数が同じ(列数は不問) 独立(行間で影響しない) 行ごとの合計、平均、最大値
BYCOL関数 各列の集計・変換 入力の列数と出力の列数が同じ(行数は不問) 独立(列間で影響しない) 列ごとの合計、平均、最大値


MAP関数の構文

=MAP(array1,lambda_or_array2,...)

array1 マップする配列。
必須です。
array2 マップする配列を複数指定可能です。
省略可能。
※LAMBDAが最大253個のパラメーターを指定できるので、上限は同じと思われますが未確認です。
lambda LAMBDAは最後の引数である必要があります。
LAMBDAでは、MAPから渡される各配列のパラメーターを必ず受け取る必要があります。
ただし、受け取ったパラメーターは必ずしも使用しなくても構いません。
必須です。

無効なLAMBDA関数または誤った数のパラメーターを指定すると、「#VALUE!」が返されます。
array1だけは配列ではなく、単一データ(スカラー型、定数値)の指定も可能ですが、実際に使う事は無いと思います。
array2以降は必ず配列でなければなりません。
ただし、セルは1つでも配列として扱われますので、1セルの指定は可能です。

array1,array2,...は全て同じ大きさ(縦横サイズ)である必要があります。
違うサイズの場合は一番小さい配列までは正しく処理されますが、
いずれかの配列が不足している要素は常に「#N/A」となります。


MAP関数の使用例と解説

1つの配列のみ使用

Excel エクセル MAP関数 LAMBDAヘルパー関数

この数列に対して、偶数と奇数を入れ替えます。
偶数は-1、奇数は+1

Excel エクセル MAP関数 LAMBDAヘルパー関数

数式
=MAP(A1#,LAMBDA(x,IF(ISODD(x),x+1,x-1)))
解説
Excel エクセル MAP関数 LAMBDAヘルパー関数

MAP関数は引数に指定された元の配列(A1#)から1つずつ要素を取り出します。
配列から取り出した要素はLAMBDAに渡されます。
LAMBDAで計算した結果の値は、元の配列の同じ位置に配置されます。
MAPは配列の全ての要素に対してこれを行い、元の配列と同じ大きさの配列を返します。


2つの配列を使用

Excel エクセル MAP関数 LAMBDAヘルパー関数

数式
=MAP(A1:C5,E1:G5,LAMBDA(x,y,IF(x=y,"",x&":"&y)))
解説
Excel エクセル MAP関数 LAMBDAヘルパー関数

MAP関数は引数に指定された元の2つの配列の同じ位置から1つずつ要素を取り出します。
配列から取り出した要素はLAMBDAに渡されます。
LAMBDAで計算した結果の値は、元の配列の同じ位置に配置されます。
MAPは配列の全ての要素に対してこれを行い、元の配列と同じ大きさの配列を返します。

※上記数式はMAPを使わなくても簡単な数式で書くことができます。
=LET(a,A1:C5,b,E1:G5,IF(a=b,"",a&":"&b))
このスピル数式と見比べて、MAP関数の挙動を理解してください。


FILTER関数での使用例



Officeのサポート MAP関数」ではFILTER関数での使用例が出ています。
MAPを使わずにFILTER関数だけでできるものですが、MAPの使い方の一つとしてここでも紹介しておきます。

この問題は、以下で出題した問題の転用となります。
スピルとは:スピル基礎から応用までの問題集:ここまでの総合演習5
上記では範囲を列指定することを意識して数式を作成しましたが、
MAP関数を使う場合は、列指定では遅くなってしまいますので、この下では行範囲を絞って簡略化しています。

Excel エクセル MAP関数 LAMBDAヘルパー関数

数式
=FILTER(A2:D17,
MAP(A2:A17,B2:B17,C2:C17,
LAMBDA(a,b,c,AND(COUNTIF(a,G2),COUNTIF(b,G3),c>=DATE(G4,G5,1),c<=DATE(G4,G5+1,0)))))
解説
FILTER関数の詳細については以下を参照してください。
FILTER関数(範囲をフィルター処理)
・FILTER関数の書式 ・FILTER関数使用例のサンプルデータ ・FILTER関数の基本 ・空白セルを0ではなく空白にする場合 ・複数条件のフィルター ・関数を使ってフィルター ・横(列)でフィルター ・表示する列を選択する ・FILTER関数の結果を他の関数で使う ・スピルによって新しく追加された関数
=FILTER(配列,含む,[空の場合])
この引数「含む」にMAP関数を入れています。
この「含む」は、配列と同じ行数の「TRUE/FALSE」の配列が必要になります。

MAP関数で3つの配列を引数に指定しています。
MAP(A2:A17,B2:B17,C2:C17,D2:D17,
A2:A17:取引先
B2:B17:科目
C2:C17:日付

以下の4条件をAND関数に入れています。
COUNTIF(a,G2) ・・・ ワイルドカードでの一致検索
COUNTIF(b,G3) ・・・ ワイルドカードでの一致検索
c>=DATE(G4,G5,1) ・・・ 日付の下限
c<=DATE(G4,G5+1,0) ・・・ 日付の上限

MAP関数は3つの配列(A2:A17,B2:B17,C2:C17)の各行から1つずつ(計3つの値を)順に取り出しLAMBDAへ渡します。
LAMBDAは、受け取った3つの値を基にAND関数を実行します。
LAMBDAで計算された値は、MAP関数により元の配列と同じ行数の配列として返されます。

※FILTER関数の「含む」ではAND関数は使えません。
FILTER関数の「含む」でのAND条件は、
(条件1)*(条件2)*(条件3)
このように掛け算でANDを表します。
これは、AND関数が引数内の全てを一括で処理してしまう為、行単位の「TRUE/FALSE」を返してもらえないからです。
=AND(COUNTIF(A2:A17,G2),COUNTIF(B2:B17,G3),C2:C17>=DATE(G4,G5,1),D2:D17<=DATE(G4,G5+1,0))
この結果は、TRUE/FALSEの1データしか返りません。

これに対してMAP関数は配列1行ずつに対して処理し、同じ大きさの配列を返します。
MAP(A2:A17,B2:B17,C2:C17,
LAMBDA(a,b,c,AND(COUNTIF(a,G2),COUNTIF(b,G3),c>=DATE(G4,G5,1),c<=DATE(G4,G5+1,0))))

この結果は、16行(2~17)の「TRUE/FALSE」の配列を返します。
したがって最終的に、
=FILTER(A2:D17,16行の「TRUE/FALSE」の配列)
この形になりますので、FILTER関数で正しく絞りこみできます。

Excel エクセル MAP関数 LAMBDAヘルパー関数


LAMBDA以降の新関数の問題集 ・・・ 解答は別ページになっています。

・目次 ・LAMBDA踊るぞ編 ・LAMBDA踊るぞ編2 ・SCAN編 ・MAP編 ・REDUCE編 ・山手線営業の旅編 ・BYROW,BYCOL編 ・ここからはフリー問題だよ編 ・好きな関数を使ってくれ編 ・いろんな関数を使ってね編 ・魔球編 ・豚が木に登れば落ちることもある編 ・たまには100点とってみたいものだ編 ・これは何と言う処理なんだろ編 ・数字は嫌いなのだ編 ・外堀から埋めていくぞ編 ・なぜわざわざそうしたいのか編 ・かっこつけてんじゃないよ編 ・頭の体操だけど新関数の出番はあるか?編 ・定番だけど出してなかったよね編
LAMBDA以降の新関数の使用例
・2つの1次元配列から、それをクロス結合した結果を返す ・A列が同じ行のB列の値を連結して、A列の一意な値とともに出力 ・名前定義を使わずにLAMBDA関数で再帰する方法 ・文字列を大文字小文字変換して大小文字の全組み合わせを出力 ・2つのテーブルの片方しかない行を縦に連結出力 ・3連単、3連複のフォーメーション買目を全て列挙する ・FILTER関数の出力行数・列数を指定する ・月が縦で日が横の表を、曜日(7列)で縦に折り返す ・文字列内の括弧()()の中の文字を取り出して列挙 ・表内にあるセル内改行を複数行に展開 ・文字列の中から1文字削除の全パターン出力 ・クロスABC分析 ・月利が毎月変動する月複利の計算 ・レーベンシュタイン距離 ・文字列を数字と数字以外で分割 ・縦横スピルしないXLOOKUP代替(MATCH+INDEX,FILTER,CHOOSEROWS) ・直積(クロス結合、…




同じテーマ「エクセル入門」の記事

スピルとは:ここまでの総合演習問題と解説
LAMBDA以降の新関数について
LAMBDA関数(カスタム関数の作成)
MAP関数(配列各値を新しい値にマッピングした配列を返す)
REDUCE関数(配列にLAMBDAを適用し累積値を返す)
SCAN関数(配列にLAMBDAを適用し各中間値を返す)
BYROW関数(配列の行単位にLAMBDAを適用し列を集約)
BYCOL関数(配列の列単位にLAMBDAを適用し行を集約)
ISOMITTED関数(LAMBDAの引数省略の判定)
MAKEARRAY関数(行数・列数で計算した配列を作成)
VSTACK関数(配列を縦方向に順に追加・結合)


新着記事NEW ・・・新着記事一覧を見る

IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ