SUMPRODUCT関数の使い方|配列計算で集計を効率化
SUMPRODUCT関数は、複数の配列の対応する要素を掛け合わせてから合計する関数です。単純な積和計算だけでなく、条件付き集計や加重平均の計算にも活用できる汎用性の高い関数です。配列数式を使わずに配列的な計算ができるため、古いバージョンのExcelでも利用できます。
SUMPRODUCT関数の基本構文
=SUMPRODUCT(配列1, [配列2], [配列3], ...)
引数の説明
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 配列1 | 掛け合わせる最初の配列(セル範囲) | 必須 |
| 配列2 | 掛け合わせる2番目の配列 | 任意 |
| 配列3 | 掛け合わせる3番目の配列 | 任意 |
| … | 最大255個の配列を指定可能 | 任意 |
すべての配列は同じサイズ(同じ行数・列数)でなければなりません。
基本的な動作の仕組み
SUMPRODUCT関数は以下の2つのステップで計算を行います。
- 各配列の対応する要素を掛け合わせる
- 掛け合わせた結果をすべて合計する
例として、A1:A3が{2, 3, 4}、B1:B3が{5, 6, 7}の場合を見てみましょう。
=SUMPRODUCT(A1:A3, B1:B3)
計算過程は次のようになります。
- 2 x 5 = 10
- 3 x 6 = 18
- 4 x 7 = 28
- 合計: 10 + 18 + 28 = 56
実践例1:売上金額の合計(数量 x 単価)
商品ごとの数量と単価が別々の列にある場合、一度に合計金額を計算できます。
| 商品 | 数量 | 単価 |
|---|---|---|
| ノートPC | 5 | 89000 |
| マウス | 20 | 2500 |
| キーボード | 15 | 5800 |
=SUMPRODUCT(B2:B4, C2:C4)
計算過程は以下の通りです。
- 5 x 89000 = 445000
- 20 x 2500 = 50000
- 15 x 5800 = 87000
- 合計: 582000
SUM関数で個別に計算する場合は各行に作業列が必要ですが、SUMPRODUCT関数なら1つの数式で完結します。
実践例2:条件付き合計(SUMIFSの代替)
SUMPRODUCT関数で条件付き集計を行う方法です。条件をTRUE/FALSE(1/0)の配列に変換して掛け合わせます。
東京支店の売上合計を求めます。
=SUMPRODUCT((A2:A6="東京") * C2:C6)
(A2:A6=“東京”)は各セルが「東京」と等しいかを判定し、TRUEなら1、FALSEなら0の配列を返します。これに売上の配列を掛けると、東京以外のデータは0になり、東京のデータだけが合計されます。
実践例3:複数条件での集計
複数の条件を掛け合わせて集計します。東京支店の4月の売上合計を求めます。
=SUMPRODUCT((A2:A6="東京") * (B2:B6="4月") * C2:C6)
条件の配列同士を掛け合わせることで、AND条件を実現しています。すべての条件が1(TRUE)の行だけが合計に含まれます。
実践例4:加重平均の計算
SUMPRODUCT関数は加重平均の計算に最適です。科目ごとに異なる配点(重み)がある場合の加重平均を求めます。
| 科目 | 点数 | 配点比率 |
|---|---|---|
| 国語 | 80 | 0.3 |
| 数学 | 90 | 0.4 |
| 英語 | 70 | 0.3 |
=SUMPRODUCT(B2:B4, C2:C4) / SUM(C2:C4)
計算過程は次の通りです。
- 80 x 0.3 + 90 x 0.4 + 70 x 0.3 = 24 + 36 + 21 = 81
- SUM(C2:C4) = 1.0
- 81 / 1.0 = 81
配点比率の合計が1.0でない場合も、SUM関数で割ることで正しい加重平均が得られます。
実践例5:条件付きカウント
条件を1/0の配列にしてSUMPRODUCT関数で合計することで、条件付きカウントも可能です。
東京支店かつ売上50万以上の件数を求めます。
=SUMPRODUCT((A2:A100="東京") * (C2:C100>=500000))
条件の配列だけを掛け合わせると、結果は1と0の配列になります。その合計が条件を満たすデータの件数です。
よくあるエラーと対処法
#VALUE!エラー
最も多いエラーです。以下の原因を確認してください。
- 配列のサイズが異なる: すべての配列が同じ行数・列数であるか確認する
- 配列にエラー値が含まれる: #N/Aや#DIV/0!などのエラーが1つでもあると、全体がエラーになる
- 文字列が数値として処理できない: 数値の入った範囲に文字列が混在していると計算できない
エラー値が含まれる可能性がある場合は、IFERROR関数で事前に処理します。
=SUMPRODUCT(IFERROR(B2:B4 * C2:C4, 0))
条件式の括弧忘れ
条件をSUMPRODUCT関数内で使う場合、条件式を括弧で囲む必要があります。
# 間違い(括弧がない)
=SUMPRODUCT(A2:A6="東京" * C2:C6)
# 正しい
=SUMPRODUCT((A2:A6="東京") * C2:C6)
大量データでの処理速度
SUMPRODUCT関数は配列全体をメモリ上で計算するため、数万行以上のデータでは処理が遅くなることがあります。大量データの条件付き集計にはSUMIFS関数の方が高速です。
SUMPRODUCT関数とSUMIFS関数の使い分け
| 場面 | 推奨関数 |
|---|---|
| 単純な条件付き合計 | SUMIFS |
| 加重平均の計算 | SUMPRODUCT |
| 複雑な条件式(計算結果を条件に使う) | SUMPRODUCT |
| 大量データの集計 | SUMIFS |
| 配列の積和計算 | SUMPRODUCT |
単純な条件付き集計ならSUMIFS関数が高速でわかりやすいですが、SUMPRODUCT関数は計算の柔軟性で勝っています。
Google スプレッドシートでの互換性
SUMPRODUCT関数はGoogle スプレッドシートでも同じ構文で利用できます。条件式を配列として使う方法も同様に動作します。
まとめ
SUMPRODUCT関数は配列の積和計算を行う汎用的な関数です。
- 複数の配列の対応要素を掛け合わせて合計する
- 条件を1/0の配列に変換して条件付き集計に活用できる
- 加重平均の計算に最適
- すべての配列は同じサイズにする必要がある
- 大量データにはSUMIFS関数を検討する
SUMPRODUCT関数の仕組みを理解すると、配列を使った計算の応用範囲が広がります。条件付き集計や加重平均など、通常の関数では難しい計算に挑戦してみてください。