1つのSUMIF関数で集計できますのでやり方を紹介します。
- SUMIF関数の第1引数で関数式が使えるので論理演算ができます。これを利用してAND/OR検索ができます。
- AND条件はSUMIFSの方が簡単ですがOR条件はこちらの方法が便利です。ANDとORの混合も可能です。
AND条件の例
次の画像ではC,D列の値にそれぞれ条件をつけて、所在地が「東京都」で、かつ設立年が1980以降の事業所について売上高を集計しています。
G3セル
=SUMIF(ARRAYFORMULA((C3:C11="東京都")*(D3:D11>=1980)),">0",E3:E11)
第1引数内に2つの条件を記し、「*」でつなぐことでAND演算を実現しています。ARRAYFORMULAが必要になるため式が長くなってしまうのが痛いところです。
もちろんSUMIFSを使った方が簡単ですが、このように1つのSUMIFでもできなくはないことを示す例です。
なお、第2引数(条件)は「1」でもよいです。ただしOR条件では2以上の値になることもあるので、条件を変えなくていいように「">0"」で統一しています。
OR条件の例
次の画像では所在地が「東京都」か、または設立年が1980以降(1980以上)の事業所について売上高を集計しています。
G3セル
=SUMIF(ARRAYFORMULA((C3:C11="東京都")+(D3:D11>=1980)),">0",E3:E11)
上記例の「*」を「+」に代えただけです。これでOR条件になります。
ほかのやり方だとSUMIFを2回分合計してSUMIFSで重複分(両方の条件に該当する値)を差し引くといった方法が考えられますが、条件が3つ以上になったりすると訳が分からなくなってきます。しかしこの方法なら重複を考慮する必要がありません。条件が増えても項を増やして「+」でつなぐだけで済みます。
AND条件とOR条件の複合例
次の画像では所在地が「東京都」か、または「設立年が1980以降2000以前(1980以上2000以下)」の事業所について売上高を集計しています。
G3セル
=SUMIF(ARRAYFORMULA((C3:C11="東京都")+((D3:D11>=1980)*(D3:D11<=2000))),">0",E3:E11)
複合的な条件も簡単に表現できます。
カッコのつけ方でANDとORの順位を調整できますのでさらに複雑な条件も設定可能です。ただしその辺りの詳細は省略します。
なお「+」より「*」の方が優先されますので、この例ではカッコが1つ余分であることがわかります。
備考
- 「~以上~以下」といった条件についてはISBETWEEN関数を使えば1つの条件にまとめることができます。上記のデータで設立年が1980から2000までを集計する場合は「=SUMIF(ISBETWEEN(D3:D11,1980,2000),TRUE,E3:E11)」で済みます。これだけならSUMIFSの方が簡単ですが、ARRAYFORMULAがいらないので多少楽になります。
- これまた身も蓋もありませんがSUM/FILTERの併用で同じことができます。例えば最後のケースは「=SUM(FILTER(E3:E11,(C3:C11="東京都")+(D3:D11>=1980)*(D3:D11<=2000)>0))」で同じ結果が得られます。