COUNTIFで非表示セルをカウントしない方法|SUBTOTAL関数で可視セルだけ集計【完全ガイド】

非表示をカウントしないcountif関数

Excelでフィルターをかけた後にデータをカウントしようとして、「あれ?非表示にしたセルまで数えられてる…」と困った経験はありませんか?Excel資料作成で頼られている人ほどハマる現象ですね。

結論から言うと、COUNTIF関数は非表示セルもカウントしてしまいます。可視セル(表示されているセル)だけを数えたい場合は、SUBTOTAL関数(集計方法109)SUMPRODUCT関数、Microsoft 365ならFILTER関数を組み合わせるのが正解です。

本記事では、COUNTIFとSUBTOTALの違いから、フィルター後に条件付きでカウントする方法まで、コピペで使える数式付きで徹底解説します。

COUNTIFとSUBTOTALの使い分け

✔ 本記事のポイント

  • COUNTIF関数は非表示セルもカウントしてしまう(仕様)
  • SUBTOTAL関数(109)なら可視セルだけカウントできる
  • SUBTOTAL集計方法「9」と「109」の違いを完全解説
  • フィルター後に条件付きでカウントする方法(SUMPRODUCT・FILTER関数)
  • 作業列を活用して誰でも理解できる数式に

 

  1. 【最短で解決】非表示セルを除外してカウントする数式(コピペOK)
    1. ① 単純に可視セルの数を数える(条件なし)
    2. ② フィルター後の特定条件をカウント(例:「りんご」の数)
    3. ③ Microsoft 365 / Excel 2021以降ならFILTER関数で簡単に
  2. COUNTIF関数の基本|条件に一致するデータをカウント
    1. COUNTIF関数の構文
    2. COUNTIFの使用例
  3. COUNTIF関数の問題点|なぜ非表示セルもカウントされるのか
  4. SUBTOTAL関数で非表示セルをカウントしない方法
    1. SUBTOTAL関数の構文
    2. カウント用の集計方法は「2」「3」「102」「103」
    3. SUBTOTAL関数の使用例
  5. 【応用】フィルター後に条件付きでカウントする方法
    1. 方法①:SUMPRODUCT × SUBTOTAL × OFFSET(全バージョン対応)
    2. 方法②:FILTER × COUNTA(Microsoft 365 / Excel 2021以降)
    3. 方法③:作業列+COUNTIFS(最も分かりやすい)
  6. SUBTOTAL関数とAGGREGATE関数の違い
  7. 効率的なデータ集計術|作業列を活用するべし!
    1. 作業列の設定方法
    2. 作業列を活用するメリット
  8. よくある質問(FAQ)
    1. Q1. SUBTOTAL(109)を入れたのに「9」と同じ動きをします。なぜ?
    2. Q2. COUNTIFのままで非表示を除外する方法はないの?
    3. Q3. テーブル機能を使っている場合は?
    4. Q4. ピボットテーブルでも非表示は除外できる?
  9. まとめ|COUNTIFとSUBTOTALの使い分けをマスターしよう
    1. 📌 この記事の重要ポイント

【最短で解決】非表示セルを除外してカウントする数式(コピペOK)

とにかくすぐに使いたい方向けに、結論の数式を3つ紹介します。

① 単純に可視セルの数を数える(条件なし)

=SUBTOTAL(103, A2:A100)

② フィルター後の特定条件をカウント(例:「りんご」の数)

=SUMPRODUCT((A2:A100="りんご")*(SUBTOTAL(103,OFFSET(A2,ROW(A2:A100)-ROW(A2),0))))

③ Microsoft 365 / Excel 2021以降ならFILTER関数で簡単に

=COUNTA(FILTER(A2:A100,A2:A100="りんご"))

※ FILTER関数はフィルターで非表示にしたセルは無視できないため、フィルター連動が必要なら②のSUMPRODUCT方式がベストです。

 

COUNTIF関数の基本|条件に一致するデータをカウント

ExcelのCOUNTIF関数は、指定した条件に一致するセルの個数を数える関数です。

COUNTIF関数の構文

=COUNTIF(範囲, 条件)

COUNTIFの使用例

例えば、次のようなデータがあるとします。

A列
2りんご
3みかん
4りんご (非表示行)
5ドラゴンフルーツ
6ドリアン

「りんご」の数をカウントするには、以下の数式を入力します。

=COUNTIF(A2:A6, "りんご")

結果は 2 になります。

ここで問題が発生!可視セルだけで集計したいのに、COUNTIF関数は非表示のデータも数えてしまいます。本来なら結果を1にしたいのに、思い通りにいきません。

 

COUNTIF関数の問題点|なぜ非表示セルもカウントされるのか

COUNTIF関数の最大の弱点は、フィルターや手動で非表示にしたデータもカウントしてしまうことです。

これは「バグ」ではなくExcelの仕様です。COUNTIF関数は「指定範囲内で条件に一致するセルを機械的に数える」設計のため、表示状態(可視/非表示)を判別する機能を持っていません。

例えば、フィルターで「りんご」を非表示にして「みかん」「ドリアン」だけを表示しても、COUNTIF関数は裏で非表示になっている「りんご」も数え続けます。

「非表示データをカウントから除外したい!」――そんなときに活躍するのが SUBTOTAL関数 です。

 

SUBTOTAL関数で非表示セルをカウントしない方法

SUBTOTAL関数を使えば、フィルターで非表示にしたデータをカウントから除外できます。

SUBTOTAL関数の構文

=SUBTOTAL(集計方法, 範囲)

カウント用の集計方法は「2」「3」「102」「103」

集計方法動作フィルターで非表示手動で非表示(行)
2COUNT(数値のみ)除外含める
3COUNTA(空白以外)除外含める
102COUNT(数値のみ)除外除外
103COUNTA(空白以外)除外除外

💡 ポイント:「3」と「103」の違いは何?

  • 3:オートフィルターで非表示になったセルは除外。ただし、行番号を右クリックして「非表示」にしたセルは含めてカウントします。
  • 103:オートフィルターでも手動非表示でも、両方とも除外してカウントします。

迷ったら「103」を使えば、どちらの非表示にも対応できて安全です。

SUBTOTAL関数の使用例

A列(商品名)B列(作業列)
りんご1
みかん1
りんご1
ドラゴンフルーツ1
ドリアン1

🔹 B2:B6のデータを可視セルだけカウントする場合

=SUBTOTAL(103, B2:B6)

✅ オートフィルターや手動で「りんご」を非表示にすると、カウントから除外されます。

 

【応用】フィルター後に条件付きでカウントする方法

「フィルターで絞り込んだ状態で、さらに『りんごの個数だけ』を数えたい」――この場合、SUBTOTALだけでは対応できません。条件付きカウントが必要です。

方法①:SUMPRODUCT × SUBTOTAL × OFFSET(全バージョン対応)

=SUMPRODUCT((A2:A100="りんご")*(SUBTOTAL(103,OFFSET(A2,ROW(A2:A100)-ROW(A2),0))))

少し複雑に見えますが、仕組みはこうです。

  • A2:A100="りんご" → 条件に一致するセルを判定
  • SUBTOTAL(103,OFFSET(...)) → 各セルが表示されているか判定(1=表示、0=非表示)
  • SUMPRODUCTで両方を掛け合わせてカウント

これで「フィルター後に表示されている『りんご』の数」だけを集計できます。

 

 

方法②:FILTER × COUNTA(Microsoft 365 / Excel 2021以降)

=COUNTA(FILTER(A2:A100,A2:A100="りんご"))

FILTER関数で「りんご」だけを抽出し、COUNTAで数を数えます。

ただし注意点として、FILTER関数はオートフィルターによる非表示は無視できません。フィルター連動が必要な場合は、方法①のSUMPRODUCT方式を使ってください。

 

 

方法③:作業列+COUNTIFS(最も分かりやすい)

SUBTOTALの結果を作業列に出してから、COUNTIFSで条件を絞る方法です。

B列(作業列)に以下を入力:

=SUBTOTAL(103,A2)

カウント数式:

=COUNTIFS(A2:A100,"りんご",B2:B100,1)

数式の意味が直感的に分かるため、共有ファイルではこの方式が最もおすすめです。

 

 

SUBTOTAL関数とAGGREGATE関数の違い

SUBTOTALの上位互換としてAGGREGATE関数があります。エラー値や非表示行の扱いをより細かく制御できます。

=AGGREGATE(3, 5, A2:A100)
関数特徴対応バージョン
SUBTOTALシンプルで使いやすい。基本これでOKすべてのバージョン
AGGREGATEエラー値の無視など細かい制御が可能Excel 2010以降

通常はSUBTOTALで十分ですが、エラー値が混在するデータを扱うならAGGREGATEが便利です。

 

効率的なデータ集計術|作業列を活用するべし!

SUBTOTAL関数を使う際、データを整理しやすくするポイントは 作業列を設けること です。

作業列の設定方法

  1. B列に「フラグ列」を作成
    • 各行に「1」を入力(または=SUBTOTAL(103,A2)を入れる)
  2. SUBTOTAL関数でB列をカウント
    • =SUBTOTAL(109,B2:B100) で表示中の合計を取得

作業列を活用するメリット

  • ✅ 可視セルだけカウントできる
  • ✅ 数式をシンプルにできる
  • ✅ データのメンテナンスがしやすい
  • ✅ 他人が見ても理解できる

 

よくある質問(FAQ)

Q1. SUBTOTAL(109)を入れたのに「9」と同じ動きをします。なぜ?

A. SUBTOTAL(109)は「行」の非表示は除外しますが、「列」の非表示は除外できません。列を非表示にしている場合は別の方法が必要です。

Q2. COUNTIFのままで非表示を除外する方法はないの?

A. COUNTIF単体では不可能です。SUBTOTALやSUMPRODUCT、FILTER関数と組み合わせる必要があります。

Q3. テーブル機能を使っている場合は?

A. テーブルの「集計行」を有効にすると、自動でSUBTOTAL関数が挿入されます。フィルター連動で可視セルだけ集計されるので便利です。

Q4. ピボットテーブルでも非表示は除外できる?

A. ピボットテーブルはフィルター/スライサーで絞り込むと自動的に表示中のデータのみ集計されます。集計が複雑な場合はピボットも有力な選択肢です。

 

まとめ|COUNTIFとSUBTOTALの使い分けをマスターしよう

📌 この記事の重要ポイント

  • COUNTIF関数 → 非表示セルもカウントしてしまう(仕様)
  • SUBTOTAL関数(103) → 可視セルだけ数える基本の関数
  • SUMPRODUCT × SUBTOTAL × OFFSET → フィルター後の条件付きカウントに対応
  • FILTER × COUNTA → Microsoft 365ならスマートに解決
  • 作業列を活用すれば誰でも理解できる数式に

Excelで「フィルター後のデータをカウントしたい」「非表示セルを除外して集計したい」という場面は、実務で本当によく出てきます。

シンプルな可視セルカウントならSUBTOTAL(103)、フィルター後の条件付きカウントならSUMPRODUCT方式、最新環境ならFILTER関数――目的に応じて使い分けましょう。

「自分にしか読めない数式」より「誰でも理解できる構造」を意識することで、業務ファイルの品質はぐっと上がります。本記事の数式は全てコピペで使えるので(参照するセルは実態に合わせて変更してください)、ぜひブックマークしてご活用ください。

編集長
古見遊 正

流通業で働きながら、2004年からWindowsを使い続けている80年代生まれのサラリーマン。ExcelとPowerPointを極め、仕事の効率化を追求中。苦手だったWordも克服中!Excelを使いこなせるだけで周囲から『神扱い』されるけれど、そのせいで『システムに詳しい人』だと勘違いされがち。でも、それが新しい知識を得るきっかけになった。そんな経験を活かして、Excel・PowerPoint・Word・Windowsの時短ワザ&仕事術を発信中!

古見遊 正をフォローする
[1]Excel時短ワザ

コメント

タイトルとURLをコピーしました