いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)SUMPRODUCT関数で複数条件(AND,OR)の合計を求める

 ExcelのSUMPRODUCT関数は積和(複数の掛け算の合計)を求める関数ですが、条件付きの合計値を求めるのに使われることがあります。ここではSUMPRODUCT関数で複数条件を指定して合計を求める方法を紹介します。

  • SUMPRODUCT関数と*演算子を使ってAND条件(かつ)の条件付き合計値を求めることができます。
  • 同じく+演算子を使ってOR条件(または)の条件付き合計値を求めることができます。

AND条件(かつ)の場合

 次の画像では、F3セルに入力された産地とG3セルに入力された品名を左側の表から検索し、両方に該当する行の数量の合計を求めています(35+50=85)。

 H3セル

=SUMPRODUCT((B3:B11=F3)*(C3:C11=G3),D3:D11)

 第1引数の「(B3:B11=F3)*(C3:C11=G3)」により、B3:C11の範囲について両方の条件に該当する行を1に、そうでない行を0に変換した9行1列の配列が生成されます。
 これとD3:D11の積和を求めることで結果的にAND条件付きの合計値が求められます。



 複数の組について合計値を求める場合は絶対参照を用いてコピーします。
 上記の式の第1引数を「(B3:B11=F3:F5)*(C3:C11=G3:G5)」などとしてもうまくいきません。これは下記のOR条件についても同様です。

 H3セル(下方にフィルコピー)

=SUMPRODUCT((B$3:B$11=F3)*(C$3:C$11=G3),D$3:D$11)

OR条件(または)の場合

 次の画像では、F3セルの産地とG3セルの品名のいずれかに該当する行の数量の合計を求めています(20+40+35+50+20=165)。

 H3セル

=SUMPRODUCT(((B3:B11=F3)+(C3:C11=G3)>0)*1,D3:D11)

 「(B3:B11=F3)+(C3:C11=G3)」により2,1,0のいずれかの数値からなる配列が生成されます(両方の条件を満たす行=2、一方の身の条件を満たす行=1、どちらも満たさない行=0)。
 ただしこれを直接D3:D11と掛け算するとおかしな結果になりますので、さらに「>0」の比較や「*1」を加えて0以外がすべて1になるよう変換しています(結果的に1つ以上の条件を満たす行=1、どちらも満たさない行=0)。
 これとD3:D11の積和を求めることでOR条件付きの合計値が求められます。

 式の共通化を図るなら上記のAND条件の場合も「((B3:B11=F3)*(C3:C11=G3)>0)*1」と記したいですが、むやみに複雑になりそうで悩ましいところです。
 いずれ間違えやすい部分なので、第1引数の部分だけ実行して1または0が返ってくる結果になるか確認した方が無難です。



 次の画像は1つの列に複数の条件を課す例です。
 2つの品名のいずれかに該当する行の数量の合計を求めています(20+35+50+20+25=150)。

 G3セル

=SUMPRODUCT(((B3:B11=E3)+(B3:B11=F3)>0)*1,C3:C11)

 基本的には1つ上の例と同じで、同じ列に2つの条件を課しているだけの違いです。

備考

 そもそも条件付き合計値を求める際にSUMPRODUCT関数を使う理由として「閉じている他のブック(ファイル)を参照して計算できる」という点が挙げられます(SUMIF(S)関数ではこれができない)。
 ただし近年のバージョンではSUM関数とIF関数を併用してもできるのでSUMPRODUCT関数を使う意味は薄れていると考えらえれます。

 ちなみにSUM関数とIF関数を使う複数条件(AND)の合計の例は次のようなものになります。

 H3セル

=SUM(IF((B3:B11=F3)*(C3:C11=G3),D3:D11,0))

 IF関数の特性により「*」を「+」に代えるだけでOR条件になりますのでその点でも扱いやすいです。