- 「=SUMIF(検索範囲, 条件, 合計範囲)」という式で、条件を満たす数値を合計することができます。
- 検索範囲(条件を課す範囲)と合計範囲(合計すべき数値の範囲)を別に指定できるのがポイントです。
機能と構文
SUMIF関数の機能は簡単に言うと「条件を満たす数値を合計する」というもので、構文は次のとおりです。
SUMIF(検索範囲, 条件[, 合計範囲])
単純な例としては最初の2つの引数だけを指定し、数値のうち条件を満たすものだけを合計することができます。具体的には「数値のうち0以上のものだけを合計する」といった集計ができます。
ただし検索範囲(条件を課す範囲)と合計範囲(候補となる数値が記されている範囲)を別々に指定できるのがポイントで、これにより文字列や日付に条件を課し、それに対応する数値を合計することが可能です。具体的には「東京都にある店舗の売り上げ合計を求める」とか「2023/3/1以降の降雨量の合計を求める」といった集計ができます。
基本的な使用例
文字列に対し条件を指定する
次の画像では、左側の表のうち事業者の所在地が「東京都」であるものについて、対応する(同じ行にある)売上高の合計を求めています。
G3セル
=SUMIF(C3:C11,"東京都",E3:E11)
検索範囲(条件を課す対象)は、所在地が記されているC3:C11としています。また、条件として文字列を指定する場合はこのように「" "」(ダブルクォーテーション)で囲みます。そして合計範囲は売上高が記されているE3:E11とします。
これにより、所在地が「東京都」であるセルが検索され、それと同じ行にある売上高が合計されます。
ところで、検索範囲と合計範囲はそれぞれ複数行複数列にすることができます。
次の例ではそれぞれ2行2列の範囲を指定し、「A」の字に対応する位置にある数値(1と1000)の合計を求めています。
H3セル
=SUMIF(B3:C4,"A",E3:F4)
FILTER関数だと条件を課す対象が1列または1行に限られますがSUMIF関数にはそうした制約がありません。
あまり使わないやり方かとは思いますが、参考まで。
数値に対し条件を指定する
次の画像では検索範囲をD3:D11とし、設立年が2002であるものについて売上高を合計しています。
G3セル
=SUMIF(D3:D11,2002,E3:E11)
条件として数値を指定する場合は「" "」で囲まずそのまま指定してOKです。
次の例では、設立年が2002以降(2002以上)であるものについて売上高を合計しています。
G3セル
=SUMIF(D3:D11,">=2002",E3:E11)
値の大小比較を行う場合は比較演算子(ここでは「>=」)を使い、さらに「" "」で囲む必要があります。
比較演算子には次のようなものがあり、比較の内容によって使い分けます(Aは比較対象となる値)。
値 | 意味 |
---|---|
=A | Aと等しい |
<>A | Aと異なる |
>=A | A以上 |
>A | Aより大きい |
<=A | A以下 |
<A | Aより小さい |
ところで、次の画像では合計する対象である売上高に対し条件を課し、売上高が30000以上であるものについて合計を求めています。
G3セル
=SUMIF(E3:E11,">=30000")
検索範囲と合計範囲が同じである場合は、このように合計範囲の指定を省略できます。
日付に対し条件を指定する
ここ(と次の画像)ではD列の値が「設立日」という日付になっている点に注意してください。
設立日が「1982/4/1」であるものについて売上高を合計しています。
G3セル
=SUMIF(D3:D11,"1982/4/1",E3:E11)
日付を指定する場合も文字列のように「" "」で囲む必要があります。
数値のように「=SUMIF(D3:D11,1982/4/1,E3:E11)」とすると「1982/4/1」の部分が「1982割る4割る1」(=495.5)という数値と解釈されてしまい、うまく合計が求められません。
なお、文字の内容だけで比較しているようにも見えますが「1982-4-1」のように別の形式で入力していてもきちんと合計されます。
次の画像では同様に「1982/4/1」以降であるものの売上高を合計しています。
G3セル
=SUMIF(D3:D11,">=1982/4/1",E3:E11)
比較演算子を使う場合は数値と同様に比較演算子を付けて全体を「" "」で囲みます。
条件とする値をセルから参照する
次の画像では最初の例と全く同様に、所在地が「東京都」であるものについて売上高を合計しています。
ただし、ここでは条件とする文字列をG3セルに置いてそれを参照しています。
G3セル
=SUMIF(C3:C11,G3,E3:E11)
このように他のセルに置かれた値を条件として参照する場合は「" "」は要らず、セル番地をそのまま記すだけでOKです。
数値や日付を条件とする場合も同様です。
ただし比較演算子を使う場合は注意が必要です。
次の画像では設立年が2002年以降という条件で売上高を合計していますが、条件に用いる数値をG3セルを参照しています。
G3セル
=SUMIF(D3:D11,">="&G3,E3:E11)
セルに入力されている値と比較する場合は比較演算子を「" "」で囲み、セル番地はその外に置いて「&」でつなぎます。
あいまい検索(ワイルドカード)による合計
部分一致(~を含む)の例
SUMIF関数では条件としてワイルドカードを使うことができるので、文字列のあいまい検索を行うことがことができます。
ここでは事業者名が「工」の字を含んでいるものについて売上高を合計しています。
G3セル
=SUMIF(B3:B11,"*工*",E3:E11)
文字列の前後に「*」を付けれることで部分一致検索ができます。
「*」は0文字以上の文字列を意味するワイルドカードです。
前方一致(~で始まる)の例
ここでは事業者名が「山」で始まるものの売上高を合計しています。
G3セル
=SUMIF(B3:B11,"山*",E3:E11)
文字列の後ろに「*」を付ければ前方一致検索になります。
後方一致(~で終わる)の例
ここでは事業者名が「店」で終わるものの売上高を合計しています。
G3セル
=SUMIF(B3:B11,"*店",E3:E11)
文字列の前に「*」を付ければ後方一致検索になります。
複数条件(AND/OR)による合計
AND条件(かつ)の例
複数の条件をともに満たすものについて数値を合計する例です。
これについては専用関数といえるSUMIFS関数を使うのが賢明です。
ここでは所在地が東京都で、かつ、設立年が1982以降である事業者の売上高を合計しています。
G3セル
=SUMIFS(E3:E11,C3:C11,"東京都",D3:D11,">=1982")
SUMIFS関数を使ってC3:C11の範囲に「東京都」、D3:D11の範囲に「1982以降(以上)」という条件をそれぞれ指定しています。
SUMIFS関数の場合、合計範囲を第1引数で指定するというのが紛らわしく間違いやすいポイントです。
OR条件(または)の例
複数の条件のいずれかを満たすものについて数値を合計する例です。
これについてはSUMIFS関数を使っても解決にはならないので別の工夫が必要ですが、単純なやり方としては「それぞれの条件についてSUMIF関数で合計を求め、それらを足し算する」という方法が考えられます。
次の例では所在地が「東京都」であるか、または「千葉県」であるものについて売上高の合計を求めています。
G3セル
=SUMIF(C3:C11,"東京都",E3:E11)+SUMIF(C3:C11,"千葉県",E3:E11)
2つのSUMIF関数を使ってその結果を足しています。
ただしこれは「両方を満たす事業所はありえない」(2つの条件が排他的である)からこそできるやり方です。
注意すべきなのは両方の条件を満たす場合がある(条件が排他的でない)ときです。
次の画像では、同じやり方で、所在地が「東京都」であるか、または設立年が「1982以降(以上)」であるものの売上高を合計しているつもりですが、両方を満たす事業者が二重に集計され、結果は誤りとなっています。
(※それぞれの条件に該当するセルに着色しています。次の画像も同様)
G3セル(誤り)
=SUMIF(C3:C11,"東京都",E3:E11)+SUMIF(D3:D11,">=1982",E3:E11)
このやり方の延長で正解を求めようとするなら、さらにSUMIFS関数を使って両方の条件を満たす事業所の合計を求め、その値を上記の式から差し引く(→二重集計分が除かれる)というやり方が考えられます。
しかしそれだと条件が3つ以上の場合に対応が困難になるのが痛いところです。
そこで検索範囲の指定において「+」演算子を使った論理演算を行い、実質的にOR条件を指定するというものが考えられます。これなら1つのSUMIF関数でOR条件の合計が求められます。
次の画像では所在地が「東京都」であるか、または設立年が「1982以降(以上)」であるものの売上高の合計を正しく求められています。
G3セル
=SUMIF(ARRAYFORMULA((C3:C11="東京都")+(D3:D11>=1982)),">0",E3:E11)
Excelと異なりSUMIF関数の第1引数で関数式が使えるため可能となっているやり方です。FILTER関数で複数条件を指定する際に同じようなやり方をするのが有名なので、そちらをご存じならすぐに理解できると思います。この第1引数の値は、条件をいくつ満たしているかによって1になったり2になったりするので、第2引数は「">0"」としておく必要があります。
ARRAUFORMULAを併用する必要があり式が長くなるのがやや残念ですが、3つ以上の条件でも全く同様に表現でき、二重三重に集計してしまう心配をしなくてよいのが大きなメリットです。
なお同様にAND条件も可能で、次の記事で両方の例について触れています。
うまく合計が求められない場合
COUNTIF関数と同様に誤った使い方をしてもたいていエラーにならず、単に0になるか意図しない数値が返るので注意深く使用する必要があります。
誤った結果になる主な原因と対策について次の記事で紹介しています。