SUMPRODUCTでAND/OR条件の集計をする方法

SUMIFSでは表現しづらい複雑な条件——例えば「A列がXまたはYで、かつB列が3以上」といったAND/OR混在の集計をしたいとき、結論から言うとSUMPRODUCT関数を使えば、条件式を配列として自由に組み合わせて1つの数式で集計できます。この記事では基本の書き方、SUMIFSとの使い分け、OR条件での重複カウントの注意点まで解説します。

目次

SUMPRODUCTでAND条件を集計する基本の書き方

基本の形は次の通りです。

=SUMPRODUCT((条件1)*(条件2)*集計範囲)

ざっくり言うと、条件を全部掛け算して、全部○(TRUE)のときだけ1になり、それ以外は0になって消える、というイメージです。

「条件1」「条件2」はそれぞれ範囲同士の比較(例: B2:B6=”文具”)で、TRUE/FALSEの配列を返します。これを掛け算すると、両方の条件を満たす行だけが1(それ以外は0)になり、集計範囲を掛けて合計することでAND条件の集計が実現します。

なぜSUMIFSではなくSUMPRODUCTを使うのか

SUMIFSは「範囲=条件」という単純な一致条件を並べるのは得意ですが、比較演算子をまたいだOR条件(「文具または雑貨」など)や、複数列にまたがる複雑な論理式には対応しづらいという制約があります。SUMPRODUCTは条件式そのものを配列として自由に組み立てられるため、より柔軟な条件を1つの数式に落とし込めます。

具体例:カテゴリと数量の2条件で金額を集計する

次のような売上データ(A1:D6)があるとします。

A(商品) B(カテゴリ) C(数量) D(金額)
2 ノート 文具 5 500
3 マグカップ 雑貨 2 800
4 ボールペン 文具 2 200
5 付箋 文具 3 300
6 トートバッグ 雑貨 4 1600

「カテゴリが文具」かつ「数量が3以上」の金額合計を求めるには、次のように書きます。

=SUMPRODUCT((B2:B6="文具")*(C2:C6>=3)*D2:D6)

「文具」で「数量3個以上」の行だけを拾って、金額を合計する、という意味の数式です。

条件を両方満たすのは2行目・5行目なので、結果は「800」(500+300)になります。

OR条件(どちらか一方)を集計する場合

「カテゴリが文具または雑貨」の金額合計のように、どちらか一方を満たせばよいOR条件は、条件式を足し算(+)にします。

=SUMPRODUCT(((B2:B6="文具")+(B2:B6="雑貨"))*D2:D6)

「文具」または「雑貨」のどちらかに当てはまる行の金額を合計する、というイメージです(重複に注意、このあと解説)。

ただし条件が重複しうる場合(1つの行が両方の条件に一致しうる場合)、足し算の結果が2になり金額が二重に加算されてしまいます。重複の可能性がある条件では、比較演算子で0より大きいかどうかに丸めてから掛け算すると安全です。

=SUMPRODUCT((((B2:B6="文具")+(B2:B6="雑貨"))>0)*D2:D6)

足し算結果が2になっても「0より大きい=どちらかに該当」と丸めることで、二重カウントを防いでいます。

よくあるエラー・注意点

  • 範囲のサイズが揃っていない: SUMPRODUCTに渡す複数の範囲・条件は、行数・列数がすべて一致していないと#VALUE!エラーになります。
  • ワイルドカードが使えない: SUMIFS/COUNTIFSと異なり、SUMPRODUCTの文字列比較(=”文具”)はワイルドカード(*)に対応していません。部分一致が必要な場合はISNUMBER(SEARCH(…))などを組み合わせる必要があります。
  • OR条件での重複カウント: 上記の通り、条件が重複しうる場合は足し算だけでは二重集計になるため、>0で丸める処理を忘れないようにしましょう。

まとめ

SUMPRODUCTは条件式を掛け算・足し算で自由に組み合わせられるため、SUMIFSでは対応しきれない複雑なAND/OR条件の集計に向いています。件数を数えたい場合はCOUNTIFSで複数条件を満たすセルの個数を数える方法、単純なOR条件の合計であればSUMIFS関数でOR条件の集計をする方法もあわせてご覧ください。条件付き集計をさらに極めたい方は条件付きで中央値(MEDIAN)を計算する方法も参考になります。

目次