-
∨目次
- REDUCE 関数
- 使用例
- 解説
エクセル REDUCE 関数:セルの範囲をループして LAMBDA で処理した合計を求める
はじめに
エクセルの REDUCE 関数の使い方を紹介します。
REDUCE 関数はセルの範囲をループして LAMBDA 関数で処理した合計を求めます。
=REDUCE(0,A1:A3,LAMBDA(total,x,total+x)) のようにして、「SUM 関数」のように合計を求められます。
=REDUCE(0,A1:A3,LAMBDA(total,x,total+1)) のようにして、「COUNT 関数」のようにセルの数をカウントできます。
「MAP 関数」から、複数条件や複数のセルの範囲を参照できます。
-
目次
- REDUCE 関数
- 使用例
- 解説
REDUCE 関数
REDUCE(合計, 範囲, LAMBDA)
範囲の値をLAMBDAで処理して合計に加えます。
引数「合計」 | 合計の初期値を指定します。最初の引数「LAMBDA」の第 1 引数に渡します。 |
引数「範囲」 | セルの範囲や配列を指定します。 |
引数「LAMBDA」 | LAMBDA 関数を指定します。LAMBDA 関数の第 1 引数に引数「合計」の値が渡されます。第 2 引数に引数「範囲」の各値が順番に渡されます。それを計算した結果を次の LAMBDA 関数の第 1 引数に渡します。 |
使用例
合計を求める
セルの範囲「B2」~「B4」の合計を求めます。「SUM 関数」のように合計を取得できます。
引数「LAMBDA」の第 2 引数に「B4:B6」のセルを順番に渡します。引数「LAMBDA」の結果が、次の LAMBDA の第 1 引数に渡されます。次のように処理されます。
10+B3
30+B4

セルの数をカウントする
セルの範囲「B2」~「B4」のセルの数をカウントします。「COUNT 関数」のようにセルの数をカウントできます。
引数「LAMBDA」は次のように処理されます。
1+1
2+1

文字数の合計を求める
セルの範囲「B2」~「B4」の文字数の合計を求めます。=SUM(LEN(B2:B4)) と同じような結果になります。
引数「LAMBDA」は次のように処理されます。
1+LEN(B3)
3+LEN(B4)

条件を指定
100 以上の値だけ合計する
値が「100」以上のときに合計します。それ以外は無視します。=SUMIF(B3:B6,">=100") と同じような結果になります。
LAMBDA(total,x,
IF(x>=100,total+x,total)))

空のセルの数をカウントする
セルが空の数をカウントします。それ以外は無視します。=COUNTA(B2:B4) と同じような結果になります。
LAMBDA(total,x,
IF(ISBLANK(x),total+1,total)))
セルが空でない数をカウントします。それ以外は無視します。COUNTBLANK(B2:B4) と同じような結果になります。
LAMBDA(total,x,
IF(NOT(ISBLANK(x)),total+1,total)))

名前がエクセルの値だけを合計する
名前が「エクセル」のときに値を合計します。それ以外は無視します。=SUMIF(B3:B6,"エクセル",C3:C6) と同じような結果になります。
MAP(B3:B6,C3:C6,LAMBDA(b,c,IF(b="エクセル",c,FALSE))),
LAMBDA(total,x,total+x))
REDUCE 関数では複数のセルの範囲を参照できないので「MAP 関数」に条件を入力し、それを引数「範囲」に指定します。条件に一致するときは値を返し、それ以外のときは FALSE や 0 を返します。「MAP 関数」は次の結果を返します。

複数条件
上記の「名前がエクセルの値だけを合計する」のように、複数のセルの範囲を条件にするには「MAP 関数」に条件を入力します。条件に一致するときだけ値を返すようにします。
スポンサーリンク
解説
「SUM 関数」や「COUNT 関数」のように、セルの範囲に対して引数「LAMBDA」で計算した結果を求めます。合計でもセルの数でも、べき乗でも好きな処理で合計を求められます。
引数「合計」には、合計の初期値を指定します。最初の引数「LAMBDA」の第 1 引数に渡されます。
引数「LAMBDA」の第 2 引数に引数「範囲」の値を順番に渡します。
引数「LAMBDA」で計算した結果が、次の引数「LAMBDA」の第 1 引数に渡されます。最後に計算した結果が REDUCE 関数が返す値になります。
引数「LAMBDA」の引数の数が 2 つないときはエラー #VALUE! になります。
引数「LAMBDA」に「LAMBDA 関数」を指定していないときはエラー #VALUE! になります。
複数のセルの範囲
複数のセルの範囲の合計を求めるには「MAP 関数」を使用して、複数のセルの範囲をまとめます。それを REDUCE 関数で合計を求めます。
MAP(B2:B4,C2:C4,LAMBDA(b,c,b+c)),
LAMBDA(total,x,total+x))
複数のセルの範囲に条件を付けて合計を求めるには「MAP 関数」を使用して、複数のセルの範囲をまとめます。条件に一致しないセルの値は FALSE や 0 にします。それを REDUCE 関数で合計を求めます。上記の「名前がエクセルの値だけを合計する」が使用例です。
MAP(B3:B6,C3:C6,LAMBDA(b,c,IF(b="エクセル",c,FALSE))),
LAMBDA(total,x,total+x))
集計方法
「SUM 関数」のように合計を求めるには、引数「LAMBDA」を LAMBDA(total,x,total+x) のように入力します。
「COUNT 関数」のようにセルの数をカウントするには、引数「LAMBDA」を LAMBDA(total,x,total+1) のように入力します。
「AVERAGE 関数」のように平均を求めるには、REDUCE 関数で求めた 合計/件数 のように入力します。条件を付けて平均を求めるには次のように入力します。値が「100」以上の平均を求めています。何度も同じ関数を使用しないために「LET 関数」を使用しています。
条件,MAP(B2:B5,LAMBDA(x,IF(x>=100,x,FALSE))),
合計,REDUCE(0,条件,LAMBDA(total,x,total+x)),
件数,REDUCE(0,条件,LAMBDA(total,x,IF(x,total+1,total))),
合計/件数)