- 技術 💻
SUMIFS・COUNTIFSの使い方|日付範囲・OR条件・0になる原因
SUMIFSは「複数の条件をすべて満たす行の数値を合計する」関数、COUNTIFSは「同じ条件を満たす行の件数を数える」関数です。 2つは条件の書き方がまったく同じなので、条件の書き方を1回覚えれば両方に使えます。
この記事は関数の紹介ではなく、条件の書き方だけに絞りました。1つの注文表を使い、SUMIFS と COUNTIFS の数式を必ず対で並べ、日付範囲・OR条件・ワイルドカード・不等号の順に進みます。後半には、結果が 0 になったときに上から順に確かめる切り分け表を置いています。
確認環境:数式の計算結果は、すべて LibreOffice Calc 24.2.7.2(Linux、ヘッドレス実行、ロケールは日本語)で求めた値です。Excel に固有の説明は、Microsoft サポートの SUMIFS 関数・COUNTIFS 関数のページの記載に基づいています。
SUMIFS・COUNTIFSの条件の書き方早見表
合計範囲は E2:E13(金額)、条件範囲は A〜D 列という前提です。サンプル表は次の章にあります。
| やりたいこと | SUMIFS の数式 | 結果 | COUNTIFS の数式 | 結果 |
|---|---|---|---|---|
| 1条件(部署が開発部) | =SUMIFS(E2:E13,B2:B13,"開発部") |
75000 | =COUNTIFS(B2:B13,"開発部") |
4 |
| AND条件(開発部かつモニター) | =SUMIFS(E2:E13,B2:B13,G4,C2:C13,"モニター") |
48000 | =COUNTIFS(B2:B13,G4,C2:C13,"モニター") |
1 |
| 日付範囲(開始日〜終了日のセル) | =SUMIFS(E2:E13,A2:A13,">="&G1,A2:A13,"<="&G2) |
59250 | =COUNTIFS(A2:A13,">="&G1,A2:A13,"<="&G2) |
5 |
| その月の月初〜月末 | =SUMIFS(E2:E13,A2:A13,">"&EOMONTH(G3,-1),A2:A13,"<="&EOMONTH(G3,0)) |
59250 | =COUNTIFS(A2:A13,">"&EOMONTH(G3,-1),A2:A13,"<="&EOMONTH(G3,0)) |
5 |
| OR条件(総務部または営業部) | =SUM(SUMIFS(E2:E13,B2:B13,{"総務部","営業部"})) |
57850 | =SUM(COUNTIFS(B2:B13,{"総務部","営業部"})) |
8 |
| 前方一致(コピー用紙で始まる) | =SUMIFS(E2:E13,C2:C13,"コピー用紙*") |
23600 | =COUNTIFS(C2:C13,"コピー用紙*") |
4 |
| 〜以外(総務部以外) | =SUMIFS(E2:E13,B2:B13,"<>総務部") |
117600 | =COUNTIFS(B2:B13,"<>総務部") |
8 |
| 数値の範囲(数量が5以上20未満) | =SUMIFS(E2:E13,D2:D13,">=5",D2:D13,"<20") |
16250 | =COUNTIFS(D2:D13,">=5",D2:D13,"<20") |
4 |
覚えることは3つだけです。 (1) 条件は「範囲, 条件」の組を並べると AND になる。(2) 不等号は ">="&セル のように、演算子だけを引用符で囲んでセルとつなぐ。(3) OR は足し算か配列定数で作る。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「SUMIFS・COUNTIFSの使い方|日付範囲・OR条件・0になる原因」
この記事で使うサンプル表(備品の注文一覧)
架空の備品注文の表です。A1 に貼り付ければ、この記事の数式がそのまま動きます。
| 行 | A:日付 | B:部署 | C:品名 | D:数量 | E:金額 |
|---|---|---|---|---|---|
| 2 | 2026/9/1 | 総務部 | コピー用紙A4 | 10 | 5000 |
| 3 | 2026/9/3 | 開発部 | USBケーブル | 5 | 4000 |
| 4 | 2026/9/10 | 営業部 | コピー用紙A3 | 4 | 3600 |
| 5 | 2026/9/15 | 開発部 | モニター | 2 | 48000 |
| 6 | 2026/9/30 | 総務部 | ボールペン | 30 | 3000 |
| 7 | 2026/10/1 | 営業部 | コピー用紙A4 | 20 | 10000 |
| 8 | 2026/10/5 | 開発部 | キーボード | 3 | 15000 |
| 9 | 2026/10/12 | 総務部 | ノート | 15 | 2250 |
| 10 | 2026/10/20 | 営業部 | モニター | 1 | 24000 |
| 11 | 2026/10/31 | 開発部 | USBハブ | 4 | 8000 |
| 12 | 2026/11/2 | 総務部 | コピー用紙A4 | 10 | 5000 |
| 13 | 2026/11/10 | 営業部 | ボールペン | 50 | 5000 |
貼り付け用(タブ区切り):
日付 部署 品名 数量 金額
2026/9/1 総務部 コピー用紙A4 10 5000
2026/9/3 開発部 USBケーブル 5 4000
2026/9/10 営業部 コピー用紙A3 4 3600
2026/9/15 開発部 モニター 2 48000
2026/9/30 総務部 ボールペン 30 3000
2026/10/1 営業部 コピー用紙A4 20 10000
2026/10/5 開発部 キーボード 3 15000
2026/10/12 総務部 ノート 15 2250
2026/10/20 営業部 モニター 1 24000
2026/10/31 開発部 USBハブ 4 8000
2026/11/2 総務部 コピー用紙A4 10 5000
2026/11/10 営業部 ボールペン 50 5000
条件を入れるセルは次のとおりです。
| セル | 内容 | 値 |
|---|---|---|
| G1 | 開始日 | 2026/10/1 |
| G2 | 終了日 | 2026/10/31 |
| G3 | 集計したい月の中の任意の日 | 2026/10/15 |
| G4 | 部署 | 開発部 |
| G5 | 金額のしきい値 | 10000 |
| H1・H2 | OR条件の部署リスト | 総務部・営業部 |
書式の違いは「合計範囲があるかどうか」だけ
=SUMIFS(合計範囲, 条件範囲1, 条件1, 条件範囲2, 条件2, …)
=COUNTIFS( 条件範囲1, 条件1, 条件範囲2, 条件2, …)
SUMIFS の先頭にある合計範囲を取り除くと、COUNTIFS になります。SUMIFS の数式ができたら、合計範囲を消すだけで件数の数式が手に入るので、合計と件数を並べて検算に使えます。
Microsoft サポートのページによると、条件範囲と条件の組は最大 127 組まで指定でき、条件範囲は合計範囲と同じ行数・列数にする必要があります。
条件に書けるものは次の4種類です。
| 条件の種類 | 書き方 | 例 |
|---|---|---|
| 文字列と等しい | 引用符で囲む | "開発部" |
| セルの値と等しい | セル参照をそのまま | G4 |
| 数値・日付の比較 | 演算子を引用符で囲み、& で値をつなぐ |
">="&G5、">=10000" |
| あいまい一致 | ワイルドカードを含む文字列 | "コピー用紙*" |
日付範囲で集計する
日付は内部ではシリアル値という数値なので、数値と同じく不等号で比べます。開始と終了の2条件を同じ A 列に対して並べるのが基本形です。
開始日と終了日をセルで渡す
=SUMIFS(E2:E13,A2:A13,">="&G1,A2:A13,"<="&G2)
=COUNTIFS(A2:A13,">="&G1,A2:A13,"<="&G2)
計算結果:59250 と 5(10/1〜10/31 の5行)
">="&G1 は、文字列 ">=" と G1 の値を & でつないで1つの条件にする書き方です。演算子だけを引用符に入れ、セルは引用符の外に出すのがポイントです。
DATE関数で日付を作って渡す
=SUMIFS(E2:E13,A2:A13,">="&DATE(2026,10,1),A2:A13,"<"&DATE(2026,11,1))
=COUNTIFS(A2:A13,">="&DATE(2026,10,1),A2:A13,"<"&DATE(2026,11,1))
計算結果:59250 と 5
終わり側を「翌月1日より前(<)」にしておくと、月末が30日か31日かを気にせずに済みます。
日付を文字列で直接書く形と、その注意点
Microsoft の解説ページでは、">=2021/5/1" のように日付を引用符の中へ直接書く例が示されています。同じ形で書くと次のようになります。
=SUMIFS(E2:E13,A2:A13,">=2026/10/1",A2:A13,"<=2026/10/31")
=COUNTIFS(A2:A13,">=2026/10/1",A2:A13,"<=2026/10/31")
この形は、文字列 2026/10/1 を日付として読み取れるかどうかが表計算ソフトの言語設定に左右されます。今回の Calc では次の結果になりました。
| Calc のロケール設定 | SUMIFS | COUNTIFS |
|---|---|---|
| 日本語 | 59250 | 5 |
| 英語(米国) | 0 | 0 |
セル参照か DATE 関数で渡す形は、どちらの設定でも 59250 と 5 でした。 ファイルを複数の環境で開く可能性があるなら、セル参照か DATE 関数の形が安心です。
月初〜月末を自動で求める(EOMONTH 併用)
G3 に「集計したい月の中の任意の日」を入れておき、月初と月末を数式で作ります。EOMONTH(日付, 0) はその月の末日、EOMONTH(日付, -1) は前月の末日を返します。
=SUMIFS(E2:E13,A2:A13,">="&DATE(YEAR(G3),MONTH(G3),1),A2:A13,"<="&EOMONTH(G3,0))
=COUNTIFS(A2:A13,">="&DATE(YEAR(G3),MONTH(G3),1),A2:A13,"<="&EOMONTH(G3,0))
計算結果:59250 と 5
もう少し短く、「前月末より後、当月末以前」と書くこともできます。
=SUMIFS(E2:E13,A2:A13,">"&EOMONTH(G3,-1),A2:A13,"<="&EOMONTH(G3,0))
=COUNTIFS(A2:A13,">"&EOMONTH(G3,-1),A2:A13,"<="&EOMONTH(G3,0))
計算結果:59250 と 5
G3 を =TODAY() にすれば「今月分」、=EDATE(TODAY(),-1) にすれば「先月分」の集計になります。
日付範囲に別の条件を足す
G1 に月初の日付を入れ、EDATE(G1,1)(1か月後)より前までを対象にしつつ、部署の条件を足します。
=SUMIFS(E2:E13,A2:A13,">="&G1,A2:A13,"<"&EDATE(G1,1),B2:B13,G4)
=COUNTIFS(A2:A13,">="&G1,A2:A13,"<"&EDATE(G1,1),B2:B13,G4)
計算結果:23000 と 2(10月の開発部:キーボードと USBハブ)
日付に時刻が入っている列は「翌日より前」で区切る
日付と時刻が1つのセルに入っている列では、終了日の書き方で結果が変わります。次の4行で確かめました(I 列が日時、J 列が金額、G1=2026/10/1、G2=2026/10/31)。
| 行 | I:日時 | J:金額 |
|---|---|---|
| 2 | 2026/10/1 9:00 | 100 |
| 3 | 2026/10/31 0:00 | 200 |
| 4 | 2026/10/31 15:30 | 400 |
| 5 | 2026/11/1 0:00 | 800 |
| 数式 | 結果 | 含まれる行 |
|---|---|---|
=SUMIFS(J2:J5,I2:I5,">="&G1,I2:I5,"<="&G2) |
300 | 2・3行目 |
=COUNTIFS(I2:I5,">="&G1,I2:I5,"<="&G2) |
2 | 2・3行目 |
=SUMIFS(J2:J5,I2:I5,">="&G1,I2:I5,"<"&G2+1) |
700 | 2・3・4行目 |
=COUNTIFS(I2:I5,">="&G1,I2:I5,"<"&G2+1) |
3 | 2・3・4行目 |
"<="&G2 は「10/31 の 0:00 以前」という意味になるので、10/31 15:30 の行が外れます。時刻つきの列は "<"&G2+1(終了日の翌日より前)で区切ると、終了日の1日分がすべて入ります。
OR条件で集計する
SUMIFS と COUNTIFS は、条件を並べるとすべて AND になります。同じ列に2つの値を並べると、次のように「両方を同時に満たす行」を探すことになり、結果は 0 です。
=SUMIFS(E2:E13,B2:B13,"総務部",B2:B13,"営業部")
=COUNTIFS(B2:B13,"総務部",B2:B13,"営業部")
計算結果:0 と 0(1つのセルが総務部でも営業部でもある行は存在しないため)
OR にする方法は3つあります。
| 方法 | 向いている場面 | 数式の長さ |
|---|---|---|
| 足し算 | 条件が2〜3個で、読みやすさを優先したい | 条件の数だけ伸びる |
| SUM と配列定数 | 値を数式に直接書いてよい | 短い |
| SUMPRODUCT | OR の値をセルの一覧で管理したい、別々の列にまたがる OR | 中くらい |
方法1:足し算
=SUMIFS(E2:E13,B2:B13,"総務部")+SUMIFS(E2:E13,B2:B13,"営業部")
=COUNTIFS(B2:B13,"総務部")+COUNTIFS(B2:B13,"営業部")
計算結果:57850 と 8
方法2:SUM と配列定数
条件を {"総務部","営業部"} という配列定数で渡すと、SUMIFS は値ごとの結果を2つ返します。それを SUM で合計します。
=SUM(SUMIFS(E2:E13,B2:B13,{"総務部","営業部"}))
=SUM(COUNTIFS(B2:B13,{"総務部","営業部"}))
計算結果:57850 と 8(Calc では通常の Enter で確定してこの値になりました)
日付範囲などの AND 条件を後ろに足せます。
=SUM(SUMIFS(E2:E13,B2:B13,{"総務部","営業部"},A2:A13,">="&G1,A2:A13,"<="&G2))
=SUM(COUNTIFS(B2:B13,{"総務部","営業部"},A2:A13,">="&G1,A2:A13,"<="&G2))
計算結果:36250 と 3(10月の総務部と営業部)
2つの列でそれぞれ OR にしたいときは、片方をカンマ区切り(横)、もう片方をセミコロン区切り(縦)の配列定数にします。横と縦が掛け合わさり、すべての組み合わせが計算されます。
=SUM(SUMIFS(E2:E13,B2:B13,{"総務部","営業部"},C2:C13,{"モニター";"ボールペン"}))
=SUM(COUNTIFS(B2:B13,{"総務部","営業部"},C2:C13,{"モニター";"ボールペン"}))
計算結果:32000 と 3(総務部または営業部、かつ、モニターまたはボールペン)
方法3:SUMPRODUCT
OR にしたい値をセル(H1:H2)に並べておき、SUMPRODUCT で包みます。値を増やすときは、リストの範囲を広げるだけで済みます。
=SUMPRODUCT(SUMIFS(E2:E13,B2:B13,H1:H2))
=SUMPRODUCT(COUNTIFS(B2:B13,H1:H2))
計算結果:57850 と 8
SUMIFS を使わず、SUMPRODUCT だけで書くこともできます。(条件1)+(条件2) が OR、* が AND にあたります。
=SUMPRODUCT(((B2:B13="総務部")+(B2:B13="営業部"))*E2:E13)
=SUMPRODUCT((B2:B13="総務部")+(B2:B13="営業部"))
計算結果:57850 と 8
別々の列にまたがるOR(重複を二重に数えない)
「部署が開発部、または、金額が 10000 以上」のように列が違う OR は、両方を満たす行を二重に数えない工夫が必要です。SUMPRODUCT なら >0 を付けて「どちらかを満たせば 1」に丸めます。
=SUMPRODUCT(((B2:B13="開発部")+(E2:E13>=10000)>0)*E2:E13)
=SUMPRODUCT(--((B2:B13="開発部")+(E2:E13>=10000)>0))
計算結果:109000 と 6
足し算で書く場合は、「A の結果+B の結果−A かつ B の結果」とします。
=SUMIFS(E2:E13,B2:B13,"開発部")+SUMIFS(E2:E13,E2:E13,">=10000")-SUMIFS(E2:E13,B2:B13,"開発部",E2:E13,">=10000")
=COUNTIFS(B2:B13,"開発部")+COUNTIFS(E2:E13,">=10000")-COUNTIFS(B2:B13,"開発部",E2:E13,">=10000")
計算結果:109000 と 6(SUMPRODUCT の結果と一致)
ワイルドカードと不等号で集計する
ワイルドカード(あいまい一致)
Microsoft サポートのページでは、疑問符 ? が任意の1文字、アスタリスク * が任意の文字列を表し、これらの記号そのものを探すときは前にチルダ ~ を付ける、と説明されています。
| やりたいこと | SUMIFS の数式 | 結果 | COUNTIFS の数式 | 結果 |
|---|---|---|---|---|
| 前方一致(コピー用紙で始まる) | =SUMIFS(E2:E13,C2:C13,"コピー用紙*") |
23600 | =COUNTIFS(C2:C13,"コピー用紙*") |
4 |
| 後方一致(ーで終わる) | =SUMIFS(E2:E13,C2:C13,"*ー") |
72000 | =COUNTIFS(C2:C13,"*ー") |
2 |
| 部分一致(USB を含む) | =SUMIFS(E2:E13,C2:C13,"*USB*") |
12000 | =COUNTIFS(C2:C13,"*USB*") |
2 |
| 文字数を指定(ちょうど3文字) | =SUMIFS(E2:E13,C2:C13,"???") |
2250 | =COUNTIFS(C2:C13,"???") |
1 |
| 末尾の1文字だけ任意 | =SUMIFS(E2:E13,C2:C13,"コピー用紙A?") |
23600 | =COUNTIFS(C2:C13,"コピー用紙A?") |
4 |
| 〜で始まるもの以外 | =SUMIFS(E2:E13,C2:C13,"<>コピー用紙*") |
109250 | =COUNTIFS(C2:C13,"<>コピー用紙*") |
8 |
| セルの文字を含む | =SUMIFS(E2:E13,C2:C13,"*"&"ペン"&"*") |
8000 | =COUNTIFS(C2:C13,"*"&"ペン"&"*") |
2 |
| 小文字で指定(usb で始まる) | =SUMIFS(E2:E13,C2:C13,"usb*") |
12000 | =COUNTIFS(C2:C13,"usb*") |
2 |
「セルの文字を含む」の "ペン" の部分をセル参照に置き換えると、"*"&H5&"*" のように検索語をセルで切り替えられます。最後の行のとおり、英字の大文字と小文字は区別されません。
不等号(数値の比較)
| やりたいこと | SUMIFS の数式 | 結果 | COUNTIFS の数式 | 結果 |
|---|---|---|---|---|
| 以上(数値を直接書く) | =SUMIFS(E2:E13,E2:E13,">=10000") |
97000 | =COUNTIFS(E2:E13,">=10000") |
4 |
| 以上(セルで渡す) | =SUMIFS(E2:E13,E2:E13,">="&G5) |
97000 | =COUNTIFS(E2:E13,">="&G5) |
4 |
| 範囲(5以上20未満) | =SUMIFS(E2:E13,D2:D13,">=5",D2:D13,"<20") |
16250 | =COUNTIFS(D2:D13,">=5",D2:D13,"<20") |
4 |
| 等しくない | =SUMIFS(E2:E13,B2:B13,"<>総務部") |
117600 | =COUNTIFS(B2:B13,"<>総務部") |
8 |
| 日付と等しい | =SUMIFS(E2:E13,A2:A13,G1) |
10000 | =COUNTIFS(A2:A13,G1) |
1 |
使える演算子は =、<>、>、>=、<、<= の6つです。合計範囲と条件範囲に同じ列(E 列)を指定してもかまいません。
結果が0になるときの切り分け表
結果が 0 になったら、次の表を上から順に確かめます。「確認する数式」を空いているセルに入れ、右の列の結果になったら、その行が原因です。
| 順番 | 原因 | 確認する数式 | 原因に当たるときの結果 | 直し方 |
|---|---|---|---|---|
| 1 | 数値が文字列として入っている | =ISNUMBER(E2)、=COUNT(E2:E5) |
FALSE、0 | 列を数値に変換する。または VALUE で数値にして SUMPRODUCT で集計 |
| 2 | 日付が文字列として入っている | =ISNUMBER(A2)、=COUNT(A2:A5) |
FALSE、0 | 列を日付に変換する。または DATEVALUE で日付にして SUMPRODUCT で集計 |
| 3 | 範囲の大きさ・位置がそろっていない | 数式内の範囲の開始行と終了行を見比べる | 行番号がずれている | すべての範囲を同じ行から同じ行までにそろえる |
| 4 | 全角・半角の違い、前後の空白 | =LEN(B2)、=EXACT(C2,C3) |
見た目より 1 多い、FALSE | TRIM・SUBSTITUTE・ASC でそろえる |
| 5 | 比較演算子の引用符の位置 | 条件が ">=G1" の形になっていないか見る |
セル番地が引用符の中にある | ">="&G1 に直す |
ここからは、原因ごとに再現用の表と数式で確かめます。次の4行を別シートの A1 から貼った状態です(G1=2026/10/1、G2=2026/10/31 は日付として入力)。A 列・D 列・E 列は文字列として入っていて、B 列と C 列には空白や全角文字が混ざっています。
| 行 | A:日付(文字列) | B:部署 | C:品名 | D:数量(文字列) | E:金額(文字列) |
|---|---|---|---|---|---|
| 2 | 2026/10/01 | 開発部+末尾に半角空白 | USBケーブル(英字が全角) | 5 | 4000 |
| 3 | 2026/10/05 | 開発部 | USBケーブル | 3 | 15000 |
| 4 | 2026/10/20 | 先頭に半角空白+開発部 | USBケーブル+末尾に半角空白 | 1 | 24000 |
| 5 | 2026/11/02 | 開発部+末尾に全角空白 | usbケーブル | 10 | 5000 |
原因1:数値が文字列として入っている
CSV の取り込みや他のシステムからの貼り付けでは、数値が文字列として入ることがあります。SUMIFS は合計範囲の文字列を合計しないため、条件に合う行があっても 0 になります。
| 数式 | 結果 | 読み取り方 |
|---|---|---|
=SUMIFS(E2:E5,B2:B5,"開発部") |
0 | 3行目は条件に合うが、金額が文字列なので合計されない |
=COUNTIFS(B2:B5,"開発部") |
1 | 件数は数えられている=条件側は合っている |
=ISNUMBER(E2) |
FALSE | E2 は数値ではない |
=COUNT(E2:E5) |
0 | E 列に数値のセルが1つもない |
=SUM(E2:E5) |
0 | SUM でも合計されない |
=SUMPRODUCT(VALUE(E2:E5)) |
48000 | VALUE で数値に直すと合計できる |
「COUNTIFS では件数が出るのに SUMIFS は 0」なら、合計範囲が文字列になっている合図です。SUMIFS と COUNTIFS を対で使うと、この切り分けがすぐにできます。
直し方は、元の列を数値に変換するのが基本です。隣の列に =VALUE(E2) を入れて下までコピーし、その列を合計範囲にする方法が手軽です。
原因2:日付が文字列として入っている
日付が文字列のままだと、">="&G1 のような数値との比較に当てはまらず、0 になります。
| 数式 | 結果 | 読み取り方 |
|---|---|---|
=COUNTIFS(A2:A5,">="&G1,A2:A5,"<="&G2) |
0 | 10月の行が3つあるのに数えられない |
=ISNUMBER(A2) |
FALSE | A2 は日付(数値)ではない |
=COUNT(A2:A5) |
0 | A 列に日付のセルが1つもない |
=SUMPRODUCT((DATEVALUE(A2:A5)>=G1)*(DATEVALUE(A2:A5)<=G2)) |
3 | DATEVALUE で日付に直すと数えられる |
=SUMPRODUCT((DATEVALUE(A2:A5)>=G1)*(DATEVALUE(A2:A5)<=G2)*VALUE(E2:E5)) |
43000 | 金額も VALUE で直して合計 |
直し方は、隣の列に =DATEVALUE(A2) を入れて日付の表示形式にし、その列を条件範囲にするのが基本です。なお、DATEVALUE が 2026/10/01 を日付として読めるかどうかも言語設定に左右されます。Calc のロケールを英語(米国)にした場合、上の DATEVALUE の2式はエラー値(Err:502)になりました。
原因3:範囲の大きさ・位置がそろっていない
合計範囲と条件範囲は、同じ行数・列数にそろえる決まりです(Microsoft サポートの SUMIFS・COUNTIFS のページに記載)。最初の注文表で、範囲の終わりを1行ずらして確かめました。
| 数式 | Calc の結果 | 状態 |
|---|---|---|
=SUMIFS(E2:E12,B2:B13,"開発部") |
Err:502 | 行数が違う(11行と12行) |
=COUNTIFS(B2:B13,"開発部",C2:C12,"モニター") |
Err:502 | 行数が違う(12行と11行) |
=SUMIFS(E2:E13,B3:B14,"開発部") |
42600 | 行数は同じだが開始行が1行ずれている |
=SUMIFS(E2:E13,B2:B13,"開発部") |
75000 | 正しい範囲 |
行数が違う場合はエラー値で気づけます。気づきにくいのは3行目で、行数が同じで位置だけずれていると、エラーにならずに別の金額(42600)が返ります。 条件に合う行がたまたま無ければ 0 にもなります。数式をコピーしたあとは、すべての範囲が同じ行から同じ行までになっているかを見比べてください。
範囲を $E$2:$E$13 のように絶対参照にしておくと、数式をコピーしても範囲が動きません。
原因4:全角・半角の違い、前後の空白
見た目が同じでも、空白や全角文字が混ざっていると別の文字列として扱われます。
| 数式 | 結果 | 読み取り方 |
|---|---|---|
=COUNTIFS(B2:B5,"開発部") |
1 | 4行とも開発部に見えるが、一致は3行目だけ |
=LEN(B2)、=LEN(B3) |
4、3 | B2 は見た目より1文字多い=空白がある |
=TRIM(B4)="開発部" |
TRUE | 半角空白は TRIM で取り除ける |
=LEN(TRIM(B5)) |
4 | 全角空白は TRIM では残る |
=COUNTIFS(B2:B5,"開発部*") |
3 | 末尾の空白はワイルドカードで拾える(先頭の空白は拾えない) |
=COUNTIFS(B2:B5,"*開発部*") |
4 | 前後どちらの空白も拾える |
=SUMPRODUCT(--(SUBSTITUTE(SUBSTITUTE(B2:B5," ","")," ","")="開発部")) |
4 | 半角・全角の空白を両方取り除いて比較 |
品名(C 列)の全角・半角も同じ考え方です。
| 数式 | 結果 | 読み取り方 |
|---|---|---|
=COUNTIFS(C2:C5,"USBケーブル") |
2 | 3行目と5行目(小文字の usb)だけが一致 |
=EXACT(C2,C3) |
FALSE | 2行目は全角の「USB」なので別の文字列 |
=ASC(C2) |
USBケーブル | ASC は英字だけでなくカタカナも半角にする |
=ASC(C2)=ASC(C3) |
TRUE | 両方に ASC を掛けてそろえれば一致する |
=SUMPRODUCT(--(TRIM(ASC(C2:C5))=ASC("USBケーブル"))) |
4 | 空白を取り、全角・半角をそろえて比較 |
ASC を片方だけに掛けると、カタカナが半角になって一致しなくなる点に気をつけます。 比べる両方に掛けるのがコツです。
"*開発部*" のようなワイルドカードは手軽ですが、「第二開発部」のような別の部署名も拾います。根本的には、作業用の列に =TRIM(SUBSTITUTE(B2," "," ")) や =ASC(C2) を入れて表記をそろえ、その列を条件範囲にする方法が確実です。
原因5:比較演算子の引用符の位置
セル番地まで引用符の中に入れると、「G1 という文字列以上」という条件になり、0 になります。
| 数式 | 結果 | 状態 |
|---|---|---|
=SUMIFS(E2:E13,A2:A13,">=G1") |
0 | セル番地が引用符の中 |
=COUNTIFS(A2:A13,">=G1") |
0 | 同上 |
=SUMIFS(E2:E13,A2:A13,">="&G1,A2:A13,"<="&G2) |
59250 | 演算子だけを引用符に入れ、& でつなぐ |
=COUNTIFS(A2:A13,">="&G1,A2:A13,"<="&G2) |
5 | 同上 |
Microsoft サポートの SUMIFS のページでも、期待した結果ではなく 0 が表示される場合の確認点として、文字列の条件を引用符で囲んでいるかどうかが挙げられています。文字列は引用符で囲む、セル参照は引用符の外に出す、の2点をそろえて確かめてください。
そのほかに0になる書き方
| 書き方 | 結果 | 理由と直し方 |
|---|---|---|
=SUMIFS(E2:E13,B2:B13,"総務部",B2:B13,"営業部") |
0 | 同じ列に2つの値を AND で並べている。OR 条件の書き方に直す |
=SUMIFS(E2:E13,B2:B13,"開発") |
0 | 完全一致で比べるため「開発」だけでは一致しない。"開発*" にする |
=SUMIFS(J2:J5,I2:I5,">="&G1,I2:I5,"<="&G2) |
300(700 になるはず) | 時刻つきの列で終了日の当日分が外れる。"<"&G2+1 にする |
よくある質問
Q. SUMIF と SUMIFS はどちらを使えばよいですか? A. 条件が1つでも SUMIFS で書けるので、SUMIFS に統一しておくと、あとから条件を足すときに引数の並べ替えが要りません。Microsoft サポートのページにも、合計範囲の位置が SUMIFS では先頭、SUMIF では3番目という違いが注意点として書かれています。
Q. OR条件は足し算と配列定数のどちらがよいですか?
A. 条件が2〜3個なら足し算が読みやすく、あとから見た人にも意図が伝わります。値が増えそうなら、セルに一覧を作って =SUMPRODUCT(SUMIFS(…,H1:H2)) の形にすると、数式を触らずに値を追加できます。
Q. 「今月分」を自動で集計するには?
A. G3 に =TODAY() を入れ、=SUMIFS(E2:E13,A2:A13,">"&EOMONTH(G3,-1),A2:A13,"<="&EOMONTH(G3,0)) とします。月が変わると集計対象も自動で切り替わります。
Q. COUNTIFS では件数が出るのに、SUMIFS が 0 になります。
A. 条件は合っていて、合計範囲の数値が文字列になっている可能性が高い状態です。=ISNUMBER(合計範囲の先頭セル) が FALSE なら、列を数値に変換してください。
まとめ
- SUMIFS と COUNTIFS は条件の書き方が同じ。SUMIFS から合計範囲を取り除けば COUNTIFS になり、対で使うと検算と原因の切り分けに役立つ
- 日付範囲は
">="&開始セルと"<="&終了セルの2条件。日付を文字列で直接書く形は言語設定で結果が変わったので、セル参照か DATE 関数が安心 - 月初〜月末は EOMONTH で自動化できる。時刻つきの列は
"<"&終了日+1で区切る - OR条件は、足し算・SUM と配列定数・SUMPRODUCT の3通り。列が違う OR は重複を引くか
>0で丸める - ワイルドカードは
*と?、不等号は6種類。英字の大文字と小文字は区別されない - 0 になったら、文字列の数値 → 文字列の日付 → 範囲のずれ → 全角半角と空白 → 引用符の位置の順に確かめる
参考・出典
- Microsoft サポート「SUMIFS 関数」 https://support.microsoft.com/ja-jp/office/sumifs-関数-c9e748f5-7ea7-455d-9406-611cebce642b
- Microsoft サポート「COUNTIFS 関数」 https://support.microsoft.com/ja-jp/office/countifs-関数-dda3dc6e-f74e-4aee-88bc-aa8c2a866842
- Microsoft「Excel の SUMIFS 関数の使い方」 https://www.microsoft.com/ja-jp/area/biz/smb/column-excel-sumifs
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「SUMIFS・COUNTIFSの使い方|日付範囲・OR条件・0になる原因」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。