この関数は、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
関数と同じように、カスタム関数を作成して保存できます。