Excel でフィルタリングされた範囲内の空白セルまたは非空白セルをカウントするには?
Excel で大規模なデータセットを扱う際、関心のあるデータだけを表示するためにフィルターを使うのは一般的です。フィルターを適用した後、表示された(つまりフィルター済みの)結果の中に、空白セルや非空白セルがそれぞれいくつあるかをさらに分析したい場面がよくあります。Excel には可視セルをカウントする基本機能はありますが、フィルターリスト内の空白セルまたは非空白セルのみを素早く正確にカウントするのは、適切な方法を知らないと意外に難しいものです。こうしたカウントは、データクリーニング、アンケート回答の集計、フィルター済みレポートにおける未入力項目の把握など、さまざまな業務で非常に重要です。本記事では、この課題を解決するための効果的な手法をいくつかご紹介します。数式ベースの方法から VBA ベースのアプローチまで網羅し、多様な実用ニーズにお応えします。さらに、よくあるトラブルの対処法や、各ソリューションを特定のシナリオに最適化するための実践的なヒントもお伝えします。
VBA コードでフィルタリング範囲内の空白セルまたは非空白セルをカウントする
数式でフィルタリング範囲内の空白セルをカウントする
フィルタリング範囲内で空白セルのみをカウントするには、SUBTOTAL 関数と補助列を組み合わせて使用します。この方法は、フィルターを適用したリストで非表示の行を無視し、指定した列内の可視セルのうち空白のものを正確にカウントしたい場合に最適です。
空白セルのカウント結果を表示したいセルに、次の数式を入力してください:
=SUBTOTAL(3,A2:A20)-SUBTOTAL(3,B2:B20)
数式を入力したら、Enterキーを押してください。すると、フィルター適用済みリスト内の可視の空白セルの数が表示されます。以下のスクリーンショットを例としてご参照ください:

説明と使用上のヒント:
- この数式では、
A2:A20を補助列として使用する必要があります。この列には、必ず空白が含まれないことが保証されていなければなりません(たとえば、各行に連番や一意の識別子が入力された列など)。 B2:B20は、空白セルをカウントしたい範囲です。- SUBTOTAL(3, range) 関数は、指定範囲内で空白でない可視セルの個数を返します。
B2:B20の非空白セル数を補助列の合計から引くことで、フィルター適用後の(可視)データに含まれる空白セルの数が求められます。 - この方法では、フィルター適用後に表示されているセルのみが対象となるため、フィルターで非表示になった行の空白セルはカウントされません。
- 範囲()
A2:A20およびB2:B20)は、実際のデータに合わせて必ず調整してください。補助列(A 列)にはすべての行に値が入力されている必要があります。空白があると、結果が不正確になる可能性があります。
よくある問題とトラブルシューティング:
- 補助列に非表示または空白の値が含まれていると、空白セルのカウント結果が誤ることがあります。補助列の完全性を必ずご確認ください。
- 行を追加または削除した際は、数式の範囲も忘れずに調整してください。そうでないと、先頭または末尾のデータが計算対象外になってしまう可能性があります。
- フィルターが実際に適用されているかご確認ください。適用されていない場合、小計にはすべての行が含まれてしまいます。
数式でフィルタリング範囲内の非空白セルをカウントする
フィルター適用後の列で可視かつ非空白セルの数をカウントするには、Excel のSUBTOTAL 関数を使った簡単な方法があります。この方法は、フィルター適用後に表示されている非空白のエントリだけを正確にカウントし、非表示の行を自動的に無視するので最適です。
このソリューションを使用するには、カウント結果を表示したい空白セルに次の数式を入力してください:
=SUBTOTAL(102,B2:B20)
次に、Enterキーを押してください。すると、Excel は制限された範囲内の可視かつ非空白セルの数を即座に表示します。以下のスクリーンショットの例をご覧ください:

説明と使用上のヒント:
- ここでは、
B2:B20が分析対象の列を表しています。データセットに合わせて、この範囲は適宜調整してください。 102引数は、SUBTOTAL 関数内で使用され、フィルターで非表示になった行と空白セルを無視して、可視セルのみをカウントします。- このソリューションは、単一列の標準的なフィルターリストに最適です。
注意事項:
- この方法では、「空白」のように見えても空文字列(「」)を返す数式を含むセルはカウントされません。Excel では、こうしたセルは真の空白とは見なされないためです。
- 結合済みセルや不規則な範囲を使用している場合は、数式の出力結果を正確にご確認ください。
- 新しい行を追加したりデータを移動したりした際は、必ず範囲を更新してください。
VBA コードでフィルタリング範囲内の空白セルまたは非空白セルをカウントする
非連続範囲や複数列を含むフィルタリング範囲、あるいは柔軟なカスタマイズが求められる高度なシナリオでは、VBA マクロを使って可視セルのみを効率的にループし、空白セルまたは非空白セルを正確にカウントできます。この方法は、複数列にわたる空白/非空白セルのカウントや、数式では簡単に処理できない複雑なデータレイアウトなど、高い柔軟性が求められる場面に特に適しています。
メリットと適用可能なシナリオ:
- 複数列や非連続範囲に対して、一度の操作で処理できます
- フィルターへの対応が容易で、可視セルのみを考慮します
- 1 回の操作で、空白セルと非空白セルのどちらをカウントするかを選択できます
- 標準的な数式では対応できない場合や、マクロの実行に慣れた上級ユーザー向けに最適です
制限事項:
- VBA エディターへのアクセスと、マクロの実行許可が必要です
- カウントロジックでは、空文字列(「」)を返す数式を含むセルを空白と見なします
1。「開発」タブで「Visual Basic」をクリックし、Microsoft Visual Basic for Applicationsエディターを開きます。VBA ウィンドウで「挿入」→「標準モジュール」をクリックして新しいモジュールを作成し、以下のコードをモジュールウィンドウにコピー&ペーストしてください:
Sub CountVisibleBlanksOrNonBlanks()
Dim rng As Range
Dim cell As Range
Dim countBlanks As Long
Dim countNonBlanks As Long
Dim resp As Integer
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set rng = Application.Selection
Set rng = Application.InputBox("Select the filtered range to analyze", xTitleId, rng.Address, Type:=8)
If rng Is Nothing Then Exit Sub
resp = MsgBox("Do you want to count BLANK cells? (Click No to count non-blank cells)", vbYesNo + vbQuestion, xTitleId)
countBlanks = 0
countNonBlanks = 0
For Each cell In rng.SpecialCells(xlCellTypeVisible)
If cell.Value = "" Then
countBlanks = countBlanks + 1
Else
countNonBlanks = countNonBlanks + 1
End If
Next cell
If resp = vbYes Then
MsgBox "Number of visible blank cells: " & countBlanks, vbInformation, xTitleId
Else
MsgBox "Number of visible non-blank cells: " & countNonBlanks, vbInformation, xTitleId
End If
End Sub 2。F5 キーを押して、コードを実行しましょう。
- 対象範囲の選択または確認を求めるプロンプトが表示されます。
- マクロは、空白セルをカウントするかどうかを尋ねます(「はい」をクリック)。非空白セルをカウントしたい場合は、「いいえ」をクリックしてください。
- 結果はメッセージボックスに表示され、可視セルのうち空白セルまたは非空白セルの数を示します。
操作のヒントとエラー処理:
- 範囲に結合セルが含まれていても、マクロは正しくカウントしますが、フィルター適用後のデータに重複やずれがないかご注意ください。
- マクロを実行する際に有効な範囲が選択されていないと、有効な範囲を選択するよう促されます。
- 大規模なデータセットでは、マクロの完了まで数秒かかる場合があります。結果を示すメッセージボックスが表示されるまで、しばらくお待ちください。
- 「セルが見つかりません」というエラーやダイアログが表示された場合は、選択範囲に少なくとも1 つの可視行が含まれており、かつフィルターが有効になっていることをご確認ください。
まとめと推奨事項:日常的な使用では、Excel の数式メソッドがシンプルで迅速、しかも追加設定が不要です。複数列や非連続データの処理、あるいはより高い柔軟性が求められる場合には、VBA ソリューションが非常に優れた適応性を発揮します。マクロを実行する前には、必ず作業内容を保存し、マクロのセキュリティ設定がコードの実行を許可していることを確認してください。
最高の Office 業務効率化ツール
| 🤖 | KUTOOLS AI アシスタント:次に基づいてデータ分析を革新します:インテリジェント実行 | コード生成| カスタム数式作成 | データ分析とチャート生成| 拡張機能呼び出し… |
| 人気の機能:検索・ハイライト、または重複をマーキング | 空白行を削除する | データを失うことなく列の結合またはセルを | 数式を使用しない四捨五入... | |
| スーパー LOOKUP:複数条件 VLookup | 複数値 VLookup | 複数シート間 VLookup | ファジーマッチ.... | |
| 高度なドロップダウンリスト:ドロップダウンリストをすばやく作成 | 連動型ドロップダウンリスト | 複数選択可能なドロップダウンリスト.... | |
| 列マネージャー:指定した数の列を追加|列の移動|非表示列の表示状態を切り替え|範囲および列の比較... | |
| 注目の機能:グリッドフォーカス | デザインビュー |強化された数式バー | ワークブックとシートマネージャー | リソースライブラリ(オートテキスト)| 日付ピッカー | ワークシートの統合 | 暗号化/セルの復号化 | リストからメール送信 | スーパーフィルター | 特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線。。。) 。。。 | |
| トップ15 ツールセット:12 テキストツール(テキストの追加、特定の文字を削除、...)| 50+チャートタイプ(ガントチャート、...)| 40+実用的関数(誕生日に基づいて年齢を計算します、...)| 19 挿入ツール(QR コードを挿入、パスから画像を挿入、...)| 12 変換ツール(単語に変換する、為替レートの変換、...)| 7 結合と分割ツール(高度な行のマージ、セルの分割、...)|さらに多数 |
Kutools for Excel でExcel スキルを強化し、これまでにない効率を体験しましょう。Kutools for Excel は、生産性を高め、時間を大幅に節約できる高度な機能を300 以上提供します。最も必要な機能を今すぐ入手するにはこちらをクリック。。。
Office Tab は Office にタブインターフェースをもたらし、作業を大幅に簡単にします
- Word、Excel、PowerPoint でタブを使った編集と閲覧を有効にします。Publisher、Access、Visio、Project でもご利用いただけます。
- 複数のドキュメントを、新しいウィンドウではなく、同じウィンドウ内の新しいタブで開いたり作成したりできます。
- 日々の生産性を50%も向上させ、毎日数百回ものマウスクリックを削減します!
すべてのKutools アドインが、たった1 つのインストーラーで完結。
Kutools for Officeスイートには、Excel ・Word ・Outlook ・PowerPoint 用のアドインと Office Tab Pro が含まれており、複数の Office アプリを横断して作業するチームに最適です。
- オールインワンスイート— Excel、Word、Outlook、PowerPoint 用アドイン+Office Tab Pro
- インストーラー1 つ、ライセンス1 つ— 数分でセットアップ可能(MSI 対応)
- 連携してさらにパワーアップ— Office アプリ全体で生産性が向上
- 30 日間のフル機能トライアル— 登録不要、クレジットカード不要
- 最高のお得感— 個別アドイン購入よりお得