この関数は、LAMBDA 関数を各値に適用して、配列を累積結果に減らします。
使用例
REDUCE(5, A1:A3, LAMBDA(累積値, 現在の値, 累積値+現在の値))
REDUCE(2, A1:A3, LAMBDA(累積値, 現在の値, 累積値*現在の値))
構文
REDUCE(初期値, 配列または範囲, LAMBDA)
初期値:累積値の初期値。配列または範囲: 減らす対象の配列または範囲。LAMBDA: 配列を減らすために配列または範囲内の各値に適用するLAMBDA関数。- 構文:
LAMBDA(名前 1, 名前 2, 数式) - 要件:
- この
LAMBDA関数には、2 個の名前引数と、それらの名前引数を使用する数式を指定する必要があります。LAMBDAを適用するときに、名前 1は累積値の現在の値に、名前 2は配列または範囲の現在の値にそれぞれ解決されます。LAMBDA 関数を適用するたびに、累積値は前回取得した中間値に更新されます。単純な乗算演算の例をご覧ください。
- この
備考
- 渡された
LAMBDA関数は、2 個の名前引数を受け入れる必要があります。そうでない場合、#N/Aエラーが返されます。これらの引数は、累積値と現在の値に、この順序で対応しています。引数について次に説明します。名前 1:累積値の現在の値に解決されます。名前 2: 入力配列の現在の値に解決されます。
- LAMBDA 関数を適用するたびに、
累積値は初期値で初期化され、前回取得した中間値に更新されます。
LAMBDA関数の適用中、入力配列の現在の値は行ごとに検出されます。
名前付き関数はLAMBDA関数のパラメータとして渡すことができ、この場合はLAMBDA関数と同様に動作します。詳しくは、名前付き関数についてのページをご覧ください。名前付き関数は、REDUCE関数のLAMBDA構文に従っているとともに、2 個の引数プレースホルダが定義されている必要があります。名前付き関数の後に丸かっこを続けることはできません。
例
単純な乗算演算
A1:A3 と初期値のすべての要素の積を返します。
サンプルデータ:
|
A |
|
|---|---|
|
1 |
3 |
|
2 |
2 |
|
3 |
4 |
例: =REDUCE(5, A1:A3, LAMBDA(累積値, 現在の値, 累積値*現在の値))
仕組み:
累積値の初期値 = 5
1. セル A1 の処理:
|
|
セル A1 の処理後:
|
|
2. セル A2 の処理:
|
|
セル A2 の処理後:
|
|
3. セル A3 の処理:
|
|
セル A3 の処理後:
|
|
結果:
|
120 |
2,000 円以上の価格を合計する
2,000 円以上のすべての価格を加算します。
サンプルデータ:
|
A |
|
|---|---|
|
1 |
5,000 円 |
|
2 |
1,000 円 |
|
3 |
3,000 円 |
|
4 |
2,000 円 |
例: =REDUCE(0, A1:A4, LAMBDA(累積値, 価格, if(価格>=20, 累積値 + 価格, 累積値)))
結果:
|
10,000 円 |
名前付き関数を LAMBDA 関数として使用する
各年の価格を特定の割合で引き上げて、その年の最終価格を返します。
サンプルデータ:
|
A |
B |
C |
|
|---|---|---|---|
|
1 |
2022 |
10% |
初回価格 |
|
2 |
2023 |
5% |
10,000 円 |
|
3 |
2024 |
5% |
|
|
4 |
2025 |
10% |
例: =REDUCE(C2,B1:B4,PRICE_INCREASE)
名前付き関数: PRICE_INCREASE が名前付き関数であり、列 B の割合値で引き上げた後の結果を出力します。
数式の定義: =累積値+累積値*セル。ここで、累積値とセルは PRICE_INCREASE について定義された引数プレースホルダです。
結果:
|
133.4 |
2 次元のデータセットに対して名前付き関数を LAMBDA 関数として使用する
行単位の順序を維持しながら、名前が重複しないように、四半期ごとの最優秀社員のリストを作成します。
サンプルデータ:
|
A |
B |
C |
|||
|---|---|---|---|---|---|
|
1 |
1Q |
2Q |
3Q |
4Q |
|
|
2 |
2020 |
城田 |
阿部 |
佐藤 |
阿部 |
|
3 |
2021 |
林 |
真下 |
城田 |
木村 |
|
4 |
2022 |
佐藤 |
百田 |
林 |
阿部 |
名前付き関数: ADD_IF_NOT_PRESENT が名前付き関数であり、指定した文字列値を値の配列に追加します。
関数の定義: =IF(CONTAINS(新しい値, 既存の値), 既存の値, {既存の値, 新しい値})。ここで、既存の値と新しい値は、この順序で ADD_IF_NOT_PRESENT について定義された引数プレースホルダで、CONTAINS は別の名前付き関数です。
例: =REDUCE({B2}, B2:E4, ADD_IF_NOT_PRESENT)
結果:
|
城田 |
阿部 |
佐藤 |
林 |
真下 |
木村 |
百田 |
一般的なエラー
渡された LAMBDA 関数の名前引数の個数が 2 個ではないLAMBDA 関数の名前引数の個数が 2 個でない場合、次のエラーが発生します。
「LAMBDA の引数の個数が間違っています。3 個の引数を指定する必要がありますが、2 個を指定しています。」
例: =REDUCE(5, C1:C4, LAMBDA(現在の値, 現在の値+1))
この例では、LAMBDA 関数に必要な名前引数が 2 個であるにもかかわらず、1 個しか指定されていません。
REDUCE 関数の最後のパラメータが LAMBDA 関数でなかった場合、次のエラーが発生します。
「引数は LAMBDA 関数にする必要があります。」
例: =REDUCE(5, C1:C4, 3)
この例では、最後の関数が LAMBDA 関数ではなく、3 になっています。
有効ではない名前引数がある場合、次のエラーが発生します。
「関数 LAMBDA の引数 1 は有効な名前ではありません。」
例: =REDUCE(5, C1:C4, LAMBDA(C1, 値, C1+値))
この例では、C1 は範囲と競合するため、無効な名前引数です。
関連する関数
- LAMBDA 関数: 一連の
名前引数と、それらの引数を使用する数式を含むカスタム関数を作成して返すことができます。 - MAP 関数: 指定した配列内の各値を新しい値にマッピングします。
- BYROW 関数: 配列を行単位でグループ化します。
- BYCOL 関数: 配列を列単位でグループ化します。
- SCAN 関数: 配列をスキャンして、中間値を生成します。
- MAKEARRAY 関数: 指定したディメンションの計算結果の配列を作成します。
- 名前付き関数の作成と使用:
LAMBDA関数と同じように、カスタム関数を作成して保存できます。