いきなり答える備忘録

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

(Gスプレッドシート)OR条件で合計を求める方法

 Googleスプレッドシートで、数値そのものにOR条件(または)をつけて合計する方法と、OR条件を満たす行の数値だけを合計する方法を紹介します。

  • SUMIF関数の第1引数で「+」演算子を使ってOR条件を設定することができます。
  • FILTER関数とSUM関数を組み合わせる方法もあります。一般的な用途ならSUMIF(S)よりむしろ簡単です。
  • いずれの方法でも、複数の条件に該当する数値を二重計上する心配がなく、簡単に条件を3つ以上に増やせるのが大きなメリットです。

SUMIF関数を使う方法

 次の画像では、B3:D4の範囲に並んでいる数値のうち10以上または5以下のものだけを合計しています。
 該当する数値は16,10,3の3つで合計は29となります。

 F3セル

=SUMIF(ARRAYFORMULA((B3:D4>=10)+(B3:D4<=5)),">0",B3:D4)

 画像にも記していますが、SUMIF関数の第1引数(範囲)にて関数式が使えます(Excelではできない)。よって単なる範囲指定だけでなく、事実上この引数内に条件を記すことができます。ここでは2つの条件をカッコで囲んで「+」でつなぐ(さらにARRAYFORMULAで囲む必要がありちょっと長くなりますが)ことによりOR条件を記述しています。どちらかの条件にあてはまることで式全体の結果は「1」となります(どちらにもあてはまらないと「0」)。よって第2引数については、この例の場合は「1」としてもいいですが、条件の内容によっては2以上になる場合もあるので「">0"」で統一しています。



 次の例はより実務的な「ある列に対し条件を課し、別の列の対応する値を合計する」というケースです。
 具体的にはC列の所在地の値が「東京都」か、またはD列の設立年の値が「1980以降(以上)」である事業所の売上高を合計しています。

 G3セル

=SUMIF(ARRAYFORMULA((C3:C11="東京都")+(D3:D11>=1980)),">0",E3:E11)

 条件を課している範囲と合計範囲が異なるだけで基本的には最初の例と同様です。この例では両方の条件に当てはまることがあり、そのとき第1引数の結果は「2」となります。
 他のやり方としてはSUMIFを2回使ってそれぞれの条件に該当するものを合計し、さらにSUMIFSを使って両方に該当するものを差し引く(二重計上になっているから)という方法がありますが、このやり方なら二重計上の存在を考慮する必要がなくSUMIF一発で済むのが大きなメリットです。条件を3つ、4つと増やすのも簡単です。

SUM関数とFILTER関数を使う方法

 集計内容は上記例と同じく、C列の所在地の値が「東京都」か、またはD列の設立年の値が「1980以降(以上)」である事業所の売上高を合計するというものです。

 G3セル

=SUM(FILTER(E3:E11,(C3:C11="東京都")+(D3:D11>=1980)))

 FILTER関数にOR条件をつける際に「+」演算子を用いるというのが定番ネタなので、こちらの方がピンとくる人が多いと思います。
 ARRAYFORMULAが要らず、いちいち「">0"」を記さなくてもよい(0以外はTRUEとみなされるから)のもメリットです。
 FILTER関数とSUMIF関数で式(引数)のつくりが異なりますが、慣れるとSUMIF(S)に頼るよりこちらの方が簡単です。ただしSUMIF関数の最初の例で見たような「複数行複数列の値に条件をつけて合計する」ということは基本的にできません(FILTER関数の条件式の制約)。



 FILTER関数を用いるもう1つのメリットは「合計範囲が複数列でも問題ない」ということです。

 H3セル

=SUM(FILTER(E3:F11,(C3:C11="東京都")+(D3:D11>=1980)))

 SUMIF(S)だと列の数だけSUMIF(S)関数を用意して足し算するなどの手間が必要ですが、FILTER関数の場合は第1引数を横に広げるだけで済みます。配列記法({範囲1,範囲2})を用いれば列が飛び飛びだろうと自由に合計できます。

論理演算(+)を用いるメリット

 上の説明でも少し記していますが、例えばSUMIF関数で論理演算(「+」によるOR条件)を使わずOR条件の合計を求めようとする場合、条件の数だけSUMIFを用意してその結果を合計し、多重計上分(2つ以上の条件に該当するものの合計)が存在し得る場合はそれを差し引くという作業が必要になります(ベン図を描いて理解するやつです)。しかし条件が2つならなんとかなっても、3つとか4つになると対応が困難になります。一方で論理演算を用いれば条件がいくつでもそれらを記して「+」でつなぐだけ(SUMIF関数は1つ)で済み、面倒な差し引きの作業が生じません。