COUNTIFS関数の使い方|複数条件・日付範囲・空白の数え方

COUNTIFS関数は、複数の条件をすべて満たすセルの個数を数える関数です。条件範囲と条件をペアで並べるのが書き方の骨格。つまずくのは「範囲の形をそろえること」と「空白の扱い」の2つに集中しています。

この記事でわかること

  • COUNTIFS関数のペア構造と、条件を増やす書き方
  • 日付で期間を区切る方法と、月ごとのクロス集計の組み方
  • 空白・空白以外の数え方と、件数の合計が合わなくなる理由
  • #VALUE!や0件になるときの原因と、切り分けの順番
  • OR条件・重複を除いた種類数など、COUNTIFSでは書けないことの代わりの手


目次

COUNTIFS関数の構文と引数

構文

=COUNTIFS(条件範囲1, 条件1, [条件範囲2, 条件2], ...)
引数指定するもの注意点
条件範囲11つ目の条件を判定するセル範囲すべての条件範囲を同じ行数・同じ形にそろえる
条件11つ目の条件比較演算子やワイルドカードは " で囲む
条件範囲2・条件22つ目以降2つで1組。組を増やすほど条件が足される

SUMIFS関数と違い、先頭に「数える範囲」を置きません。数える対象は条件範囲そのもので、すべての条件を満たした行が1件としてカウントされます。

条件どうしは常に「かつ」で結ばれます。「または」は直接書けないため、後半で別の組み立てを使います。

COUNTIFS関数はExcel 2016以降のどのバージョンでも使えます。

COUNTIFS関数の使い方|複数条件・日付範囲・空白の数え方の解説図1

基本の使い方

A列に日付、B列に都道府県、C列にステータス、D列に金額が並ぶ一覧表を例にします。東京で10万円以上の件数を数える式です。

=COUNTIFS($B$2:$B$100, "東京", $D$2:$D$100, ">=100000")

条件を直接書かず、集計表のセルを参照させると使い回せます。F列に都道府県、1行目にステータスを並べたクロス集計表なら、次の形です。

=COUNTIFS($B$2:$B$100, $F2, $C$2:$C$100, G$1)

$F2 は列だけ固定、G$1 は行だけ固定。1本の式を右にも下にもコピーするだけで表全体が埋まります。範囲側の $B$2:$B$100 は両方固定です。

条件の書き方は4通り

やりたいこと書き方例
値と一致そのまま書く"東京" / 100
大小で絞る演算子ごと " で囲む">=100000"
セルの値と演算子を組む"演算子"&セル">="&$G$1
〜を含む* で挟む"*支店*"

引っかかりやすいのは3番目です。">=G1" と書くと「G1という文字列以上」という意味になり、1件も数えられません。演算子だけを引用符に入れ、& でセル参照をつなぎます。

範囲の形は必ずそろえる

条件範囲の行数がずれていると #VALUE! になります。どの範囲も同じ行番号で始め、同じ行番号で終えるのが鉄則です。$B$2:$B$100 と $D$2:$D$50 の組み合わせは動きません。

行が増える表なら、範囲を $B$2:$B$1000 のように余裕を持たせるか、テーブル(Ctrl+T)にして構造化参照で書くと保守が楽になります。


日付で期間を区切る

同じ列を2回指定して、開始日と終了日ではさみます。

=COUNTIFS($A$2:$A$100, ">="&DATE(2026,4,1), $A$2:$A$100, "<"&DATE(2026,5,1))

日付を ">=2026/4/1" と文字列で直接書くと、環境の日付設定によって解釈が変わることがあります。DATE関数か、日付を入れたセルの参照で指定するのが確実です。

終了日は「翌日より前」で切る

Excelの日付は内部で数値として持たれ、時刻はその小数部分に入ります。4月30日 14:20 は「4月30日」より大きい値なので、"<="&DATE(2026,4,30) ではその日の時刻つきデータがまるごと漏れます。

上の式のように <= を < に変え、終了日を翌日にすれば、時刻の有無にかかわらず結果が変わりません。システムから書き出したログや受注データを数えるときは、この形を既定にしておくと安全です。

月ごとのクロス集計にする

F列に月初日を並べ、1行目にステータスを置いた表なら、次の1本で埋まります。EDATE関数は指定の月数後の同じ日を返します。

=COUNTIFS($A$2:$A$1000, ">="&$F2, $A$2:$A$1000, "<"&EDATE($F2,1), $C$2:$C$1000, G$1)

条件が3組になっても構造は同じです。日付の2組で月を挟み、3組目で軸を切る。F列を下へ伸ばすだけで月次推移表になります。

COUNTIFS関数の使い方|複数条件・日付範囲・空白の数え方の解説図2

空白の扱いと、件数が合わないとき

空白を条件にする書き方

条件数えるもの
"<>"空白以外のセル
"="空白のセル
"*"文字列が入っているセル(数値は数えない)

「担当者が未入力の案件だけを数える」なら "="、「入力済みだけを数える」なら "<>" を1組足します。

⚠️ 条件に "" を書く方法は避けてください。空欄と「空文字列を返す数式」の扱いが紛らわしく、結果が読み手の想定とずれる原因になります。空白の判定はCOUNTBLANK関数に任せるほうが確実です。

見た目が空でも「空白でない」ことがある

=IF(A2="", "", B2) のような数式が入っているセルは、画面上は空に見えても中身は数式です。この種のセルはCOUNTA関数と同じく「データあり」の側に数えられます。

そのため、次のような食い違いが起きます。

  1. 目視では30件が空欄に見える
  2. "<>" で数えると、そのうち何件かが「入力済み」に入る
  3. 集計表の合計が、実際の行数と合わなくなる

件数の検算を1本置く

クロス集計を作ったら、各セルの合計が全体件数と一致するかを必ず確かめてください。

=SUM(集計表の範囲) = COUNTA($B$2:$B$100)

FALSE が返ったら、次の3つを疑います。

  1. 表記ゆれ — 「東京」と「東京都」、全角と半角が混ざっている
  2. 空白 — 軸の列に未入力の行があり、どの区分にも入っていない
  3. "" を返す数式 — 空に見える行が「入力済み」側で数えられている

集計表に「(未入力)」の行を1本足し、"=" で数えておくと、合計が必ず一致するようになります。検算が通る集計表は、後から見た人も安心して使えます。

COUNTIFS関数の使い方|複数条件・日付範囲・空白の数え方の解説図3

うまくいかないときの原因と直し方

症状主な原因直し方
#VALUE!条件範囲の行数がそろっていないすべての範囲を同じ行番号でそろえる
#VALUE!参照先の別ブックが閉じているブックを開く。またはSUMPRODUCTで書き換える
0件になる演算子とセル参照を & でつないでいない">="&$G$1 の形に直す
0件になる前後の空白・全角半角の混在TRIM・ASCで整える
0件になる複数の値を1つの条件欄に並べたORは配列定数か足し算で書く
数が合わない数値が文字列として入っている左寄せなら文字列。「区切り位置」で変換する
最終日の分が数えられない日付に時刻が入っている"<="&終了日 を "<"&翌日 に変える
合計が全体件数と合わない空白/"" を返す数式「(未入力)」の行を足して検算する
非表示の行まで数えられるCOUNTIFSは表示状態を見ないSUBTOTAL関数かAGGREGATE関数を使う
再計算が重い範囲に列全体を指定している$B$2:$B$5000 のように行数を区切る

0件のときは条件を1組ずつ外す

式全体をにらむより、条件を減らして切り分けるほうが速く済みます。条件を1組だけ残して数え、それでも0件ならその条件が原因。あとは =COUNTIF($B$2:$B$100, $F2) で単独チェックすれば、「セル参照と演算子のつなぎ方」か「表記ゆれ」のどちらかに行き着きます。


COUNTIFSでは書けない3つと、その代わり

① OR条件(どちらか一方)

条件を波かっこで並べ、結果を合計します。

=SUM(COUNTIFS($B$2:$B$100, {"東京","大阪","名古屋"}))

⚠️ 違う列どうしでORを取るときは二重計上に注意してください。「東京の件数」と「10万円以上の件数」を単純に足すと、両方に当てはまる行が2回数えられます。この場合は重なりを引きます。

=COUNTIFS($B$2:$B$100,"東京") + COUNTIFS($D$2:$D$100,">=100000") - COUNTIFS($B$2:$B$100,"東京",$D$2:$D$100,">=100000")

② 重複を除いた「種類の数」

COUNTIFSが返すのは件数であって、種類の数ではありません。Excel 2021以降ならUNIQUE関数が最短です。

=COUNTA(UNIQUE($B$2:$B$100))

2019以前の環境では、次の形が使えます。ただし範囲に空白セルがあると #DIV/0! になるため、範囲は実データの行数ぴったりに指定します。

=SUMPRODUCT(1/COUNTIF($B$2:$B$100, $B$2:$B$100))

③ フィルタで絞った行だけを数える

COUNTIFSは行の表示・非表示を見ません。画面に出ている行だけを数えたいなら、SUBTOTAL関数(集計方法 3)かAGGREGATE関数を使います。


似た関数との使い分け

関数・機能対応バージョン選ぶ場面
COUNTIFS2016〜条件が2つ以上。条件1つでも書ける
COUNTIF2016〜条件が1つだけの短い式にしたい
COUNTA2016〜条件なしで、入力済みのセル数を数える
SUMPRODUCT2016〜複雑な条件を組みたい。閉じた別ブックも参照できる
SUBTOTAL2016〜フィルタで絞った表示中の行だけを数える
FILTER+ROWS365/2021〜数えるだけでなく、該当行そのものも見たい
ピボットテーブル2016〜集計軸を何度も入れ替えて確かめたい

SUMPRODUCTへの書き換え

同じ集計は、条件式を掛け算でつないだSUMPRODUCTでも書けます。

=SUMPRODUCT(($B$2:$B$100="東京")*($D$2:$D$100>=100000))

閉じた別ブックを参照できるのがCOUNTIFSにない利点です。一方で処理は重く、範囲を広く取るほど再計算が遅くなります。通常はCOUNTIFS、別ブック参照や複雑な条件のときだけSUMPRODUCT、という分け方が扱いやすくなります。

集計軸が固まっていないうちはピボットテーブルのほうが速く、式の保守も要りません。件数を決まった位置のセルに出したい場合だけCOUNTIFSを選ぶ、という順序で考えると迷いません。


よくある質問

Q1:条件はいくつまで指定できますか?

上限は127組とされていますが、実務でこの数に当たることはまずありません。条件が5つを超えたあたりから式が読めなくなるので、作業列で条件をまとめるか、ピボットテーブルへ切り替えるほうが保守しやすくなります。

Q2:条件範囲の大きさが違うとどうなりますか?

#VALUE! になります。COUNTIFSは各範囲の同じ位置どうしを突き合わせて判定するため、形がそろっていないと成立しません。行数だけでなく、列方向の範囲と行方向の範囲を混ぜた場合も同様です。

Q3:「東京以外」を数えると空欄も入りますか?

"<>東京" の扱いは紛らわしいので、空白以外の条件を1組足すのが確実です。=COUNTIFS($B$2:$B$100, "<>東京", $B$2:$B$100, "<>") と書けば、未入力の行を確実に除いて数えられます。

Q4:別のシートやブックの範囲を数えられますか?

別シートは =COUNTIFS(データ!$B$2:$B$100, "東京") の形で問題なく数えられます。別ブックも指定はできますが、参照先のブックを閉じると #VALUE! になります。継続して使う集計表なら、同じブック内に取り込んでおくのが確実です。

Q5:数値と文字列が混ざった列でも正しく数えられますか?

条件の型と一致するものだけが数えられます。"100" のように文字列として入力された数値は、>=100 の条件では拾われません。列を選んで「区切り位置」を実行すると、数値へまとめて変換できます。左寄せか右寄せかで見分けられます。

Q6:セルの色で数えられますか?

数えられません。COUNTIFSが見ているのはセルの値だけで、書式は判定できないためです。色分けの基準になっている値(ステータス列など)を条件にして数えてください。


まとめ

COUNTIFSの要点
  • 条件範囲と条件は必ず2つで1組。先頭に数える範囲は置かない
  • すべての範囲を同じ行数・同じ形にそろえる。ずれると#VALUE!
  • 期間は同じ列を2回。終了日は「翌日より前」で切ると時刻の漏れが消える
  • 空白は "="、空白以外は "<>"。"" は使わない
  • 集計表は合計と全体件数の検算を1本置く。合わなければ表記ゆれか空白

※関数の対応バージョンはExcelの一般提供時点の情報にもとづいています。お使いの環境や更新プログラムの適用状況により、利用できる関数や表示が異なる場合があります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、白石です。製造業の生産管理で15年、毎日の実績集計と帳票づくりをExcelでやってきました。マクロを組もうとして早々に挫折し、そこからは「関数と表の機能だけでどこまでやれるか」でしのいできた口です。部門では「この集計どうやるの」と聞かれる係になり、聞かれた内容を手元にメモし続けました。そのメモがいつのまにか、関数名ではなくやりたいことから引く形になっていて、それがこのサイトのもとになっています。Excelは同じことをやるのに何通りもやり方があって、しかもバージョンによって使える関数が違います。ここでは実際に動かして確かめた式だけを載せ、つまずきやすいところと使えないバージョンを先に書くようにしています。

目次