🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのCOUNTIF & COUNTIFS — 条件に合う行を数える(そして ">"&A1 の罠)

|

ExcelのCOUNTIF & COUNTIFS — 条件に合う行を数える(そして ">"&A1 の罠)

要点COUNTIFSすべての条件を満たした行を数えます。構文は =COUNTIFS(範囲1, 条件1, 範囲2, 条件2, …)。危ないのはエラーメッセージではなく、 もっともらしい間違った数です。条件が悪くても数は返ってきます——ただし欲しかった 数ではありません。それを防ぐ2つのルール。演算子は引用符のに入れる(">100""<>0")。セルと比べるときは連結する——">"&A1">A1" は不可。複数のペアは AND で結ばれます。OR は配列を SUM で足す。そして人がいちばん誤用しがちな 用途——重複を除いた値を数えること——は COUNTIFS の仕事ではありません。代わりに COUNTA(UNIQUE(…)) を使います。対応は Excel 2007 以降です。

=COUNTIFS(Status, "Open")
=COUNTIFS(Status, "Open", Priority, ">"&A1)

COUNTIFSSUMIFS の集計仲間です。条件付き集計の エンジンは同じで、列を足す代わりに行を数えます。だから「X のうち Y を満たすものは いくつ」の主力選手であり——そして独特にやっかいです。条件を間違えても文句を言わない からです。ただ数を手渡してくる。そして数字は、答えのような顔をしています。

この記事で学べること

  • 考え方の軸:COUNTIFS は「フィルターが残す行」を数える
  • なぜ間違った条件は静かなのか——よくある失敗を直す ">"&A1 ルール
  • COUNTIFCOUNTIFS、そして複数形が拡張に強い理由
  • AND は標準装備、OR は配列で組み立てる
  • 2つの日付の間を数える、空白と非空白を数える
  • 重複を除いた数に COUNTIFS ではなく UNIQUE が要る理由

考え方の軸:フィルターが残す行を数える

ある条件の組について FILTER が返すであろう行を思い 浮かべてください——COUNTIFS はそれを見せずに、ただいくつあるかを教えます。列と 条件を指定し、ペアをさらに積み上げると、Excel はすべての条件を満たした行を数えます。 SUMIFS と同じく、すべての範囲は同じ高さでなければなりません。SUMIFS と違って 「値」の列はありません——数えた結果そのものが答えです。

' 未対応のチケットはいくつ?
=COUNTIFS(Status, "Open")

' 未対応 かつ 高優先度はいくつ?(両方が真)
=COUNTIFS(Status, "Open", Priority, "High")

COUNTIFS を危険にする罠:静かな間違い

SUMIFS が違う列を返すときは、少なくとも多くの場合ゼロや明らかにおかしな数になります。 COUNTIFS はもっと悪い。条件が悪いとそれらしい数を返します。最も多い原因は、セルとの 比べ方を間違えることです。

=COUNTIFS(Priority, ">"&A1)     ' ✅ 「A1 の値より大きい」
=COUNTIFS(Priority, ">A1")      ' ❌ "A1" という文字列に等しいセルを数える → 0

">A1"文字列です。Excel はテキストがちょうど >A1 のセルを探し、見つからずに 0 を 返します——あるいはもっと悪く、それらしく近い部分一致を拾います。ルールは SUMIFS と 同一です。演算子(><>=<>)は引用符の、セル参照はに置いて & で つなぐ。失敗が静かである以上、条件を1つずつ試し、目に見えるフィルターと突き合わせて数を 確かめる習慣をつけてください。

もう1つの静かな驚き。文字列の一致は大文字小文字を区別しません。だから COUNTIFS(Name, "apple") は "APPLE" も "Apple" も数えます。本当に大文字小文字を区別して 数えたいなら、COUNTIFS ではできません——代わりに SUMPRODUCT(--EXACT(範囲, "apple")) を使います。

COUNTIF と COUNTIFS:複数形を使えばいい

COUNTIF は条件を1つ、COUNTIFS は AND で結んだ複数の条件を取ります。SUMIF / SUMIFS の組と違い、ここでは引数の順番が同じです——だから入れ替えの地雷はありません。 それでもおすすめは変わりません。理由はもっと単純です。2つ目の条件が必要になった瞬間、 COUNTIF は育てられず、式を書き直すことになります。最初から COUNTIFS にしておけば、 次の条件を足すのは引数を2つ増やすだけ。覚える関数は1つ、しかも拡張できる方です。

AND はタダ、OR は配列が要る

積み上げたペアは AND を意味します。1つの列で複数の値のどれかに一致する行を数える には、その値の配列に対する COUNTIFSUM で足します。

' AND — Open かつ High
=COUNTIFS(Status, "Open", Priority, "High")

' OR — Open または Pending または Blocked
=SUM(COUNTIF(Status, {"Open","Pending","Blocked"}))

配列の形は値ごとに1つずつ数を返し、SUM がそれらを合計します。これが1つの列で安全なのは、 1行が持てる状態は1つだけだからです。注意してほしいのは、OR が別々の列や重なり合う 条件にまたがる場合。そこでは数を足すと、複数の条件を満たす行を二重カウントしてしまうので、 FILTER の結果に COUNTA をかける方が安全です。

日付・空白・非空白を数える

日付範囲は日付列に対する2つの条件です——SUMIFS と同じく、境界を DATE() で組み立てて ロケール間でずれないようにします。

=COUNTIFS(OrderDate, ">="&DATE(2026,1,1), OrderDate, "<="&DATE(2026,3,31))

空かどうかは、条件は短いものの混同しやすいです。

=COUNTIFS(Notes, "")        ' 本当に空のセル
=COUNTIFS(Notes, "<>")      ' 非空白のセル(中身は何でも)

注意点を1つ。"" を返す数式が入ったセルは空に見えますが、空ではありません—— COUNTIFS(…, "")COUNTBLANK で食い違います。「空白」セルが数式の結果なら、代わりに "<>" の補集合で数えてください。

捨てるべき誤用:重複を除いた数

COUNTIFS への最も多い誤った期待が「異なる顧客は何社あるか」です。COUNTIFS は行を 数えるのであって、重複を除いた値を数えるのではありません——「ユニーク」が何かを理解 していません。今どきの答えは短い式1つです。

=COUNTA(UNIQUE(Customer))                       ' 重複を除いた顧客数
=COUNTA(UNIQUE(FILTER(Customer, Region="West"))) ' West の重複を除いた顧客数

UNIQUE がリストを重複なしの値に畳み込み、COUNTA が それを数えます——必要なら先にフィルターも。重複を除いた数を偽装するために 1/COUNTIF(…) の分数を入れた作業列を組んでいるなら(365 以前の定番ハック)、それが COUNTA(UNIQUE()) に乗り換える合図です。

ExcelMaster の使いどころ

「今四半期、A1 の上限を超える期限切れ請求はいくつ?」は条件3つと日付範囲です——そして 噛んでくるのは ">"&A1">A1" かという部分。ExcelMaster は、あなたの普通の 日本語の質問から COUNTIFS を書きます——連結も DATE() の境界も正しく。そして本当に 欲しいのが重複を除いた数なら、代わりに COUNTA(UNIQUE()) を持ち出します——誤用が レポートの中で間違った数になる前に捕まえます。

よくある質問

セルを参照すると COUNTIFS が 0 を返すのはなぜ?

ほぼ確実に ">"&A1 ではなく ">A1" と書いています。セル参照が引用符の中にあると、 Excel は文字どおりの "A1" を探して何も見つけません。演算子を引用符に入れ、セルを連結 します:=COUNTIFS(範囲, ">"&A1)

COUNTIF と COUNTIFS の違いは?

COUNTIF は条件を1つ、COUNTIFS は AND で結んだ1つ以上を取ります。引数の順番は両者で 同じなので、安全な習慣は常に COUNTIFS を使うこと——2つ目の条件が必要になった瞬間に 拡張できます。

OR / 1つの列で複数の値を数えるには?

値の配列に対する COUNTIFSUM で足します: =SUM(COUNTIF(Status, {"Open","Pending"}))。1行が持つ状態は1つだけなので、二重カウント せずに、どれかに一致する行を数えます。

2つの日付の間の値を数えるには?

日付列に2つの条件を、DATE() で組み立てます: =COUNTIFS(OrderDate, ">="&DATE(2026,1,1), OrderDate, "<="&DATE(2026,3,31))

重複を除いた(ユニークな)値を数えるには?

COUNTIFS ではできません——行を数えるだけです。=COUNTA(UNIQUE(範囲)) を使い、部分集合の 中で重複を除きたいなら先にフィルターします: =COUNTA(UNIQUE(FILTER(Customer, Region="West")))

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026-06-24。

関連ガイド: ExcelのSUMIFS関数 · ExcelのAVERAGEIFS関数 · ExcelのUNIQUE関数 · ExcelのFILTER関数