【Excel】REDUCE関数で配列を集約する!Excelの累積計算を1つの数式で表現する方法

【Excel】REDUCE関数で配列を集約する!Excelの累積計算を1つの数式で表現する方法
🛡️ 超解決

Excelで配列の値を順番に処理し、最終的な結果を1つの値に集約したい場面があります。例えば、リストの合計を計算したり、特定の条件を満たす要素を数えたりする際に、この集約処理は役立ちます。しかし、従来の関数では複数のセルや数式を組み合わせる必要がありました。本記事では、Excelの新しい関数であるREDUCE関数を用いて、配列の集約計算を1つの数式で簡潔に表現する方法を解説します。

REDUCE関数は、配列の各要素に対して指定した計算を繰り返し適用し、その結果を累積させていく関数です。これにより、複雑なループ処理や累積計算を、より直感的かつ効率的に記述できます。本記事を読めば、REDUCE関数の基本的な使い方から、具体的な応用例までを理解し、Excelでのデータ集約作業を効率化できるようになります。

【要点】REDUCE関数で配列を集約する基本と応用

  • REDUCE関数: 配列の各要素に指定した計算を繰り返し適用し、結果を累積させる関数です。
  • 初期値と配列: REDUCE関数は、計算の起点となる初期値と、処理対象の配列を指定します。
  • ラムダ関数: 各要素への適用処理は、ラムダ関数(LAMBDA)を用いて定義します。
  • 応用例: 合計、平均、条件付き集計など、様々な配列集約計算に活用できます。

ADVERTISEMENT

REDUCE関数の概要と仕組み

REDUCE関数は、Microsoft 365で利用可能な動的配列関数の一つです。この関数は、配列内の各要素を順番に処理し、その処理結果を累積させていくことで、最終的な単一の値(スカラー値)を返します。従来のExcelでは、SUM関数やAVERAGE関数のように、あらかじめ定義された集約関数しか利用できませんでした。しかし、REDUCE関数とLAMBDA関数を組み合わせることで、ユーザーは独自の集約ロジックを定義できるようになります。

REDUCE関数の構文は以下の通りです。「=REDUCE(初期値, 配列, ラムダ関数)」。ここで「初期値」は、計算を開始する際の最初の値です。例えば、合計を計算する場合は0、「最大値」を求める場合は配列の最初の要素などを指定します。「配列」は、処理対象となるデータ範囲です。そして、「ラムダ関数」は、配列の各要素に対して実行される計算ロジックを定義します。このラムダ関数は、現在の累積値と配列の現在の要素を引数として受け取ります。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

REDUCE関数とLAMBDA関数の連携

REDUCE関数が配列の各要素に対して行う処理は、LAMBDA関数によって定義されます。LAMBDA関数は、名前を付けずに定義できる関数であり、REDUCE関数内でカスタム計算を記述する際に不可欠です。LAMBDA関数は、引数として「累積値」と「配列の現在の要素」を受け取ります。そして、これらの引数を用いて、次の累積値を計算する式を返します。

例えば、配列の要素をすべて合計する計算を考えます。この場合、LAMBDA関数の引数として `acc`(累積値)と `x`(配列の要素)を定義します。そして、ラムダ関数内で `acc + x` という式を定義します。REDUCE関数は、このLAMBDA関数を配列の各要素に適用していきます。最初の要素では、初期値と最初の要素がLAMBDA関数に渡され、その結果が新しい累積値となります。次の要素では、その新しい累積値と次の要素がLAMBDA関数に渡され、同様に計算が繰り返されます。このプロセスが配列の最後まで続くことで、最終的な合計値が得られます。

REDUCE関数を使った配列集約の基本手順

REDUCE関数を用いて配列を集約する基本的な手順を説明します。まず、集約したいデータ範囲を特定します。次に、集約計算の起点となる「初期値」を決定します。例えば、合計を求める場合は0、積を求める場合は1などです。そして、REDUCE関数とLAMBDA関数を組み合わせて、具体的な計算式を記述します。

具体的な構文は「=REDUCE(初期値, 配列, LAMBDA(累積変数, 現在の要素, 計算式))」となります。ここで、「累積変数」と「現在の要素」は、LAMBDA関数内で使用される任意の名前です。例えば、「acc」を累積変数、「x」を現在の要素として使用できます。計算式では、これらの変数を用いて、次の累積値を算出するロジックを記述します。

  1. 集約対象の配列を決定する
    合計したい数値や、処理したい文字列などが含まれるセル範囲を指定します。例えば、A1:A10のような範囲です。
  2. 初期値を設定する
    計算の開始点となる値を指定します。合計なら0、積なら1、最大値なら非常に小さい数などを設定します。
  3. LAMBDA関数で計算ロジックを定義する
    2つの引数(累積変数、現在の要素)を受け取り、次の累積値を返す計算式を定義します。例えば、累積値と現在の要素を足し合わせる場合は `acc + x` と記述します。
  4. REDUCE関数に引数を渡す
    決定した初期値、配列、定義したLAMBDA関数をREDUCE関数の引数として指定します。

ADVERTISEMENT

REDUCE関数による具体的な集約計算例

例1:配列の合計を計算する

最も基本的な応用例として、配列の要素すべてを合計する方法を紹介します。例えば、セル範囲A1:A5に数値が入っているとします。この合計を求めるには、初期値に0、配列にA1:A5、LAMBDA関数で「acc + x」を指定します。

数式は以下のようになります。「=REDUCE(0, A1:A5, LAMBDA(acc, x, acc + x))」。この数式を実行すると、A1からA5までの数値が順番に加算され、最終的な合計値が1つのセルに表示されます。

例2:配列の積を計算する

配列の要素すべてを掛け合わせる(積を計算する)場合も、REDUCE関数で実現できます。この場合、初期値は乗算の単位元である1にします。配列は合計の場合と同様に指定します。

数式は「=REDUCE(1, A1:A5, LAMBDA(acc, x, acc * x))」となります。これにより、A1からA5までの数値が順番に掛け合わされた結果が得られます。

例3:条件に合う要素の合計を計算する

REDUCE関数は、単なる合計や積だけでなく、より複雑な条件付き集計も可能です。例えば、配列内で特定の条件を満たす要素のみを合計したい場合を考えます。ここでは、セル範囲A1:A5に数値があり、B1:B5に「Yes」または「No」のラベルがあるとします。A列の数値のうち、対応するB列が「Yes」であるものだけを合計したい場合です。

この場合、LAMBDA関数内でIF関数を使って条件分岐を導入します。数式は「=REDUCE(0, SEQUENCE(ROWS(A1:A5)), LAMBDA(acc, i, IF(INDEX(B1:B5, i) = “Yes”, acc + INDEX(A1:A5, i), acc)))」となります。ここでは、SEQUENCE関数とINDEX関数を組み合わせて、配列の各要素に対応するB列の値を確認し、条件を満たす場合のみA列の値を累積変数に加算しています。

例4:配列の最大値を求める

配列内の最大値を求める場合にもREDUCE関数を使用できます。この場合、初期値には配列の最初の要素を指定するか、非常に小さい数値を指定します。ここでは、配列A1:A5の最大値を求める例を示します。

数式は「=REDUCE(A1, A2:A5, LAMBDA(acc, x, MAX(acc, x)))」となります。これにより、A1とA2の大きい方、その結果とA3の大きい方、というように順番に比較され、最終的な最大値が求められます。配列全体を初期値に含める場合は、「=REDUCE(MIN(A1:A5), A1:A5, LAMBDA(acc, x, MAX(acc, x)))」のように、初期値を配列の最小値にして、配列全体を処理対象とすることも可能です。

例5:配列の最小値を求める

最大値と同様に、配列の最小値を求めることも可能です。初期値には配列の最初の要素、または非常に大きい数値を指定します。

数式は「=REDUCE(A1, A2:A5, LAMBDA(acc, x, MIN(acc, x)))」となります。これにより、A1とA2の小さい方、その結果とA3の小さい方、というように順番に比較され、最終的な最小値が求められます。配列全体を初期値に含める場合は、「=REDUCE(MAX(A1:A5), A1:A5, LAMBDA(acc, x, MIN(acc, x)))」のように、初期値を配列の最大値にして、配列全体を処理対象とすることも可能です。

REDUCE関数利用時の注意点と制限事項

REDUCE関数は非常に強力ですが、利用にあたってはいくつかの注意点と制限事項があります。まず、REDUCE関数はMicrosoft 365の比較的新しいバージョンでしか利用できません。Excel 2019以前のバージョンでは使用できないため、互換性に注意が必要です。また、REDUCE関数はLAMBDA関数と組み合わせて使用するため、LAMBDA関数が利用可能な環境である必要があります。

処理対象の配列が非常に大きい場合、数式の計算に時間がかかる可能性があります。特に、LAMBDA関数内の計算ロジックが複雑な場合、パフォーマンスの低下が顕著になることがあります。そのような場合は、可能であれば他の関数(SUMPRODUCT関数など)や、Power Queryなどのより効率的なデータ処理ツールを検討することも有効です。

また、LAMBDA関数は名前を付けずに使用できる匿名関数ですが、その構文を誤るとエラーが発生しやすくなります。引数の数や順序、計算式の記述方法には十分な注意が必要です。REDUCE関数の引数として渡すLAMBDA関数は、常に2つの引数(累積値と現在の要素)を受け取るように定義する必要がある点も忘れないでください。

REDUCE関数と他の集約関数の比較

Excelには、REDUCE関数以外にも様々な集約関数が存在します。SUM関数は単純な数値の合計、AVERAGE関数は平均値、COUNT関数は数値セルの個数を計算します。これらの関数は、特定の集約計算に特化しており、非常にシンプルで高速です。

一方、SUMPRODUCT関数は、配列の対応する要素同士を掛け合わせた結果の合計を返します。これは、条件付き合計や加重平均などの計算に汎用的に利用できましたが、REDUCE関数が登場するまでは、複雑な累積計算の代替手段としてよく使われていました。REDUCE関数は、LAMBDA関数と組み合わせることで、SUMPRODUCT関数では記述が難しかった、より柔軟で複雑な累積ロジックを1つの数式で表現できる点が大きな利点です。

ただし、前述の通り、REDUCE関数はMicrosoft 365限定の機能であり、互換性の問題があります。また、単純な合計や平均といった一般的な集約計算であれば、SUM関数やAVERAGE関数の方がシンプルで分かりやすく、パフォーマンスも優れています。REDUCE関数は、標準関数では実現できないカスタムな集約ロジックを実装したい場合に、その真価を発揮します。

機能 REDUCE関数 SUMPRODUCT関数 SUM関数
主な用途 カスタム集約、複雑な累積計算 条件付き合計、配列の積和 数値の合計
柔軟性 非常に高い(LAMBDAと連携) 中程度 低い
構文の複雑さ 高い 中程度 低い
利用可能バージョン Microsoft 365 Excel 2007以降 Excel 2007以降
パフォーマンス 配列サイズや計算量による 中程度 高い

REDUCE関数は、配列の要素を順番に処理し、その結果を累積させることで、単一の値を返す強力な関数です。LAMBDA関数と組み合わせることで、合計、積、条件付き集計、最大値・最小値の算出など、様々なカスタム集約計算を1つの数式で実現できます。Microsoft 365ユーザーであれば、この関数を活用することで、Excelでのデータ集約作業をより効率的かつ柔軟に行えるようになります。まずは、簡単な合計計算から試してみて、その便利さを実感してみてください。さらに応用すれば、時系列データの移動平均計算や、複雑な条件に基づいた集計なども実現可能です。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】