MAP 関数は、範囲の1 つずつの値に同じ計算をして、結果を同じ形で並べる関数です。=MAP(B2:B6,LAMBDA(x,IF(x>=60,"合格","不合格"))) と書くと、5 人分の合否が 1 つの式で出ます。
2 つ以上の範囲を組み合わせて計算できるのが便利なところです。この記事では、MAP の書き方と使い方を、実際の Excel で確かめた結果で説明します。MAP は Microsoft 365 の関数です。
MAP 関数の書き方
=MAP(範囲1, [範囲2, …], LAMBDA(名前1, [名前2, …], 計算))
| 引数 | 意味 |
|---|---|
| 範囲 | 1 つずつ計算したい値の範囲(いくつでも) |
| 名前 | 範囲の 1 つの値を表す名前(範囲と同じ数だけ書く) |
| 計算 | その値で何をするか |
範囲を 2 つ渡したら、LAMBDA の名前も 2 つにします。LAMBDA の書き方は LAMBDA関数の使い方で説明しています。
1. 1 つずつ合否を付ける
国語の点数の 1 つずつ(x)に IF で合否を付けます。
=MAP(B2:B6,LAMBDA(x,IF(x>=60,"合格","不合格")))

佐藤は 合格、高橋は 不合格 でした。
2. 2 つの列を組み合わせて合計する
国語(k)と数学(s)の 2 つの範囲を渡し、LAMBDA の名前も 2 つにします。
=MAP(B2:B6,C2:C6,LAMBDA(k,s,k+s))

佐藤は 127、伊藤は 157 でした。
3. 2 つとも 60 点以上かを判定する
AND は範囲をまとめると 1 つの答えになってしまいますが、MAP の中なら 1 人ずつ判定できます。
=MAP(B2:B6,C2:C6,LAMBDA(k,s,AND(k>=60,s>=60)))

両方 60 点以上の鈴木と伊藤が TRUE になりました。
4. A・B・C のランクを付ける
IFS を入れると、点数ごとにランクを付けられます。
=MAP(C2:C6,LAMBDA(x,IFS(x>=80,"A",x>=60,"B",TRUE,"C")))

85 点の鈴木は A、68 点の高橋は B、40 点の田中は C でした。
【実機で検証】MAP でつまずくところ

| ためしたこと | 式 | 結果 |
|---|---|---|
| AND を範囲でそのまま使った | =AND(MAP!B2:B6>=60,MAP!C2:C6>=60) | FALSE |
| 範囲の大きさがちがう(B2:B6 と C2:C4)の先頭 | =INDEX(MAP(MAP!B2:B6,MAP!C2:C4,LAMBDA(k,s,k+s)),4) | #N/A |
| 範囲 2 つで名前が 1 つ | =MAP(MAP!B2:B6,MAP!C2:C6,LAMBDA(k,k)) | #VALUE! |
| IF だけで書いた合否の先頭 | =INDEX(IF(MAP!B2:B6>=60,"合格","不合格"),1) | 合格 |
| 1 つずつ配列を返す | =MAP(MAP!B2:B6,LAMBDA(x,SEQUENCE(2))) | #CALC! |
AND に範囲をそのまま入れると FALSE の 1 つだけになりました。AND・OR は範囲をまとめて判定する関数なので、1 人ずつ判定したいときは MAP の中で使います。
大きさのちがう範囲(5 行と 3 行)を渡すと、足りない 4 行目は #N/A になりました。範囲 2 つに名前を 1 つしか書かないと #VALUE! です。
合否のような簡単な判定なら、=IF(B2:B6>=60,"合格","不合格") でも同じ結果(先頭は 合格)になります。1 つずつ配列を返すと #CALC! になるので、LAMBDA の計算は 1 つの値にします。
よくある質問
MAP が使えない(#NAME?)ときは?
MAP は Microsoft 365 の関数です。Excel 2021 以前では、1 行目に式を書いて下へコピーします。
1 行ずつ合計したいときは?
表の 1 行ずつの合計・最大は BYROW 関数のほうが短く書けます。
最後に 1 つの答えにまとめたいときは?
1 つずつ計算して合計などにまとめるなら REDUCE 関数を使います。

コメント