更新日:、 作成日:

エクセル MAP 関数:セルの範囲をループして各値を計算した配列を作成する

はじめに

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

MAP 関数はセルの範囲をループして各値を計算した配列を作成します。LAMBDA 関数を使用して計算します。

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

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

ループする方法は「セルや文字列をループする」をご覧ください。
この関数は 365 で使用できます。

MAP 関数の引数

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

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

LAMBDA 関数

LAMBDA 関数」の引数は次のようになっています。

LAMBDA(値1,計算)
LAMBDA(値1,値2, … 計算)

引数「値」に MAP 関数の引数「範囲」の値が 1 つずつ順番に渡されます。

引数「計算」の結果が MAP 関数が返す配列の要素になります。

使い方

MAP 関数の使い方を紹介します。

結果は配列になり複数のセルに表示されます。これはスピルという機能によるものです。詳しくは「スピル、動的配列数式の使い方」をご覧ください。

セルの範囲の計算をするので 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

使い方、条件を指定

MAP 関数の条件を指定する使い方を紹介します。

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

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

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

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

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

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

AND 条件、名前がエクセルかつバージョンが 365 か判定する

名前が エクセル でバージョンが 365 か判定します。=(B4:B8="エクセル")*(C4:C8=365) と同じ式です。

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

AND 条件、名前がエクセルかつバージョンが 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)))
14

OR 条件、名前がエクセルまたはバージョンが 365 か判定する

名前が エクセル またはバージョンが 365 か判定します。=(B4:B8="エクセル")+(C4:C8=365) と同じ式です。

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

OR 条件、名前がエクセルまたはバージョンが 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)))
16

高度な使い方

MAP 関数と他の関数を組み合わせた使い方などを紹介します。

抽出した結果を 10 倍する

3 以上の値を抽出して 10 倍します。「FILTER 関数」を使用して条件に一致する値を抽出できます。

=MAP(
FILTER(D4:D8,D4:D8>=3),
LAMBDA(d,d*10))
17

解説

セルの範囲の各値を計算した配列を作成します。「スピル」を使用しても同じ結果を取得できます。MAP 関数を使用した方が、条件をわかりやすく入力できます。

引数「範囲」と他の引数「範囲」の大きさを同じにします。範囲が一致していない箇所の値はエラー #N/A になります。

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

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

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

引数「LAMBDA」が「LAMBDA 関数」でないときはエラー #VALUE! になります。