いきなり答える備忘録

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

(Gスプレッドシート)SUMIF関数で複数条件(AND,OR)を指定する

 GoogleスプレッドシートのSUMIF関数でAND条件(かつ)やOR条件(または)をつけて集計する方法です。
 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))」で同じ結果が得られます。