エクセル MAP 関数:セルの範囲の値を LAMBDA で処理した結果の配列を作成する

はじめに

エクセルの MAP 関数の使い方を紹介します。

MAP 関数はセルの範囲の値を LAMBDA 関数で処理した結果の配列を作成します。セルの範囲の計算を関数で行います。

=MAP(A1:B1,LAMBDA(x,x&"円")) のようにして A1:B1&"円" と同じように、セルの範囲に文字列を結合した配列を作成できます。

条件に一致するセルだけ計算したいときに「スピル」を使用するよりわかりやすくできます。

この関数は 365 で使用できます。
  • 目次
    • MAP 関数
    • 使用例
    • 解説

MAP 関数

MAP(範囲1, LAMBDA)
MAP(範囲1, 範囲2, … LAMBDA)
範囲の値をLAMBDAで処理した結果の配列を作成します。

引数「範囲」セルの範囲や配列を指定します。
引数「LAMBDA」LAMBDA 関数を指定します。LAMBDA 関数の引数に引数「範囲」の各値が順番に渡されます。それを計算した結果を配列にします。

使用例

セルの範囲の計算をするので MAP 関数を使用しなくても「スピル」で同じ結果を取得できます。

セルの範囲を足し算する

=B4:B6+10 の数式を MAP 関数にします。

=MAP(B4:B6,LAMBDA(x,x+10))

引数「LAMBDA」の第 1 引数に「B4:B6」のセルを順番に渡します。引数「LAMBDA」の結果が配列の要素になります。次のように処理されます。

B4+10
B5+10
B6+10
1

セルの範囲に文字列を結合する

=B4:B6&"円" の数式を MAP 関数にします。

=MAP(B4:B6,LAMBDA(x,x&"円"))

引数「LAMBDA」は次のように処理されます。

B4&"円"
B5&"円"
B6&"円"
2

2 つのセルの範囲を掛け算する

セルの範囲「B4」~「B6」と「C4」~「C6」」を掛け算します。B4:B6*C4:C6 と同じ式です。

=MAP(B4:B6,C4:C6,LAMBDA(x,y,x*y))

引数「LAMBDA」は次のように処理されます。

B4*C4
B5*C5
B6*C6
3

セルの範囲の文字数を取得する

セルの範囲「B4」~「B6」の文字数を取得します。=LEN(B4:B6) と同じ式です。

=MAP(B4:B6,LAMBDA(x,LEN(x)))

引数「LAMBDA」は次のように処理されます。

LEN(B4)
LEN(B5)
LEN(B6)
4

条件を指定

個数が 3 以上のときに 10 倍する

個数が「3」以上のときにそれを 10 倍します。それ以外はそのままにします。=IF(B4:B7>=3,B4:B7*10,B4:B7) と同じ式です。

=MAP(B4:B7,
LAMBDA(x,
IF(x>=3,x*10,x)))
5

名前がエクセルの個数を 10 倍にする

名前が「エクセル」のときに個数を 10 倍します。それ以外は個数をそのまま返します。=IF(B4:B8="エクセル",C4:C8*10,C4:C8) と同じ式です。

=MAP(B4:B8,C4:C8,
LAMBDA(b,c,
IF(b="エクセル",c*10,c)))
6

AND 条件

名前がエクセルかつバージョンが 365 かどうか

名前が「エクセル」でバージョンが「365」かどうかを取得します。=(B4:B8="エクセル")*(C4:C8=365) と同じ式です。

=MAP(B4:B8,C4:C8,
LAMBDA(b,c,
AND(b="エクセル",c=365)))
7

名前がエクセルかつバージョンが 365 のときに個数を取得する

名前が「エクセル」でバージョンが「365」のとき、個数を取得します。それ以外は FALSE にします。=IF((B4:B8="エクセル")*(C4:C8=365),D4:D8,FALSE) と同じ式です。

=MAP(B4:B8,C4:C8,D4:D8,
LAMBDA(b,c,d,
IF(AND(b="エクセル",c=365),d,FALSE)))
8

OR 条件

名前がエクセルまたはバージョンが 365 かどうか

名前が「エクセル」またはバージョンが「365」かどうかを取得します。=(B4:B8="エクセル")+(C4:C8=365) と同じ式です。

=MAP(B4:B8,C4:C8,
LAMBDA(b,c,
OR(b="エクセル",c=365)))
9

名前がエクセルまたはバージョンが 365 のときに個数を取得する

名前が「エクセル」またはバージョンが「365」のとき、個数を取得します。それ以外は FALSE にします。=IF((B4:B8="エクセル")+(C4:C8=365),D4:D8,FALSE) と同じ式です。

=MAP(B4:B8,C4:C8,D4:D8,
LAMBDA(b,c,d,
IF(OR(b="エクセル",c=365),d,FALSE)))
10

解説

セルの範囲に対して計算する処理を行います。「スピル」を使用しても、同じ結果を取得できます。MAP 関数を使用した方が、条件をわかりやすく指定できます。

引数「範囲」を複数指定したとき、その範囲が一致していない箇所の値はエラー #N/A になります。

引数「LAMBDA」の第 1 引数に引数「範囲1」を順番に渡します。第 2 引数には引数「範囲2」のように、引数「範囲」の数だけ引数「LAMBDA」の引数に渡します。

引数「範囲」の数と引数「LAMBDA」の引数の数が一致していないときはエラー #VALUE! になります。

引数「LAMBDA」で計算した結果がセルの範囲や配列のときはエラー #CALC! になります。単一の値を返す必要があります。

引数「LAMBDA」に「LAMBDA 関数」を指定していないときはエラー #VALUE! になります。