関数
SUMPRODUCT 完全ガイド
SUMPRODUCT 完全ガイド
複数条件の集計・加重平均・重複除外カウントを1関数で
SUMPRODUCT は「配列の積の合計」だが、実務では多条件集計・重複を除いたカウント・加重平均など SUMIFS では難しい計算を1式で解決できる強力な関数。知っておくと集計の幅が大きく広がる。
GASとの関係:reduce() + filter() の組み合わせが相当
GASでSUMPRODUCT相当の処理をするには array.reduce((sum, row) => sum + row[0]*row[1], 0) のような書き方になります。スプレッドシートで SUMPRODUCT のロジックを確認してからGASに移植すると設計が明確になります。
目次
SUMPRODUCT とは
複数の配列の対応する要素を掛け合わせ、その合計を返す関数です。本来の用途は「単価 × 数量 の合計」ですが、TRUE/FALSE の配列を使うことで多目的な集計関数として使えます。
=SUMPRODUCT(配列1, [配列2, ...])
// 基本:単価×数量の合計
=SUMPRODUCT(B2:B10, C2:C10)
// → B2*C2 + B3*C3 + ... + B10*C10 の合計
多条件集計(SUMIFS との違い)
SUMPRODUCT は OR 条件や配列を使った複雑な条件が書けます。
// SUMPRODUCT で「東京 OR 大阪」の売上合計(SUMIFS では難しい)
=SUMPRODUCT(((B2:B100="東京")+(B2:B100="大阪"))*(C2:C100))
// 「担当者が田中 かつ 売上が10万以上」
=SUMPRODUCT((A2:A100="田中")*(C2:C100>=100000)*C2:C100)
// 月ごとの売上合計(MONTH関数と組み合わせ)
=SUMPRODUCT((MONTH(A2:A100)=3)*C2:C100)
重複を除いたカウント(COUNTUNIQUE の代替)
// ユニークな顧客数(重複を除いてカウント)
=SUMPRODUCT(1/COUNTIF(A2:A100, A2:A100))
// 特定条件内のユニークカウント
=SUMPRODUCT((B2:B100="東京")*(1/COUNTIFS(A2:A100, A2:A100, B2:B100, "東京")))
加重平均を計算する
// 通常の AVERAGE(件数が重みになる)
=AVERAGE(C2:C100)
// 加重平均(売上金額で重み付けした平均単価)
=SUMPRODUCT(B2:B100, C2:C100) / SUM(C2:C100)
// B列=単価、C列=数量 の場合、正確な平均単価を計算
行番号・条件組み合わせで活用するテクニック
// 条件に合う行が何行目か(最初の1件)
=MATCH(1, (A2:A100="田中")*(B2:B100="東京"), 0) + 1
// SUMPRODUCT で TRUE/FALSE を 1/0 に変換してカウント
=SUMPRODUCT((A2:A100="東京")*1) // COUNTIF(A2:A100,"東京") と同じ
SUMPRODUCT vs SUMIFS — 使い分け
| 用途 | SUMIFS | SUMPRODUCT |
|---|---|---|
| AND条件の合計 | ◎ 読みやすい | ○ 書ける |
| OR条件の合計 | △ 2式の足し算が必要 | ◎ 1式で書ける |
| 重複除外カウント | ✗ 不可 | ◎ 得意 |
| 加重平均 | ✗ 不可 | ◎ 得意 |
| 関数の組み合わせ | △ 限定的 | ◎ MONTH等と組み合わせ可 |
| 速度(大量データ) | ◎ 速い | △ 重くなりやすい |
実務でよく使うパターン
パターン1:月次売上レポートの多条件集計
// 2024年3月、東京支店の売上合計
=SUMPRODUCT(
(YEAR(A2:A1000)=2024)*
(MONTH(A2:A1000)=3)*
(B2:B1000="東京")*
C2:C1000
)
パターン2:顧客ユニーク数を月別に集計
// 3月にアクセスした顧客数(重複なし)
=SUMPRODUCT(
(MONTH(A2:A1000)=3)/
COUNTIFS(B2:B1000, B2:B1000, A2:A1000, A2:A1000)
)
パターン3:SKU×拠点の在庫金額合計
// 全SKUの(単価×在庫数)の合計
=SUMPRODUCT(B2:B500, C2:C500)
// 特定カテゴリのみ(D列がカテゴリ)
=SUMPRODUCT((D2:D500="A類")*B2:B500, C2:C500)
この知識をGASで活かす
GASでSUMPRODUCT相当の計算が必要な場合、まずスプレッドシートでロジックを確認し、GASの reduce と filter に置き換える手順が確実です。重複除外カウントはGASなら new Set() で簡単に実装できます。
Free Newsletter
AIを業務に活かしたいなら
SMR-Labメルマガ
毎週火曜10時、コピペで使えるChatGPTプロンプト・
GASテンプレートをお届け。登録は1分・完全無料。
