Excelで大量データを扱う際、「空白セル以外のデータだけを抽出したい」という場面は多くあります。
オートフィルターで手動操作する場合も簡単ですが、繰り返し発生する作業をExcel VBAで自動化すれば大幅に作業時間を短縮でき、ミスも防止できます。
この記事では「Excel VBAでフィルターを使って空白以外のデータだけ抽出する方法」に特化し、
✅ フィルターで空白以外を設定する基本構文
✅ 文字列・数値・日付での空白除外フィルター
✅ 複数条件と組み合わせたフィルター設定例
✅ 全シートへの一括適用方法
✅ トラブル防止のポイント
まで、初心者にも実務ですぐ使える内容でわかりやすく解説します。
目次
✅ Excel VBAで「空白以外」をフィルターで設定する基本
VBAでフィルターをかける基本構文:
Range("A1").AutoFilter Field:=2, Criteria1:="<>"
✅ Field:=2 :フィルターをかける列番号(A列=1、B列=2)
✅ Criteria1:="<>” :「空白以外」という条件を示す
このシンプルな記述だけで、対象列の空白セルを除外し、値が入力されているセルのみを抽出可能です。
【VBA】フィルターをかける方法を徹底解説|実務で使える自動化テクニックとトラブル防止策
✅ 空白以外フィルターの具体例(文字列列の場合)
B列(担当者名が入っている列)で空白以外の行だけ抽出する例:
Sub FilterNonBlankText()
With ActiveSheet
If .AutoFilterMode = False Then
.Range("A1").AutoFilter
End If
.Range("A1").AutoFilter Field:=2, Criteria1:="<>"
End With
End Sub
✅ フィルターが設定されていない場合は自動的に設定
✅ B列にデータが入っている行のみ表示
【VBA】フィルター解除を全て実行する方法|複数シート・複数フィルター対応の完全自動化解説
✅ 空白以外フィルターの具体例(数値列の場合)
数値列でも "<>” を使用するだけで同様に空白セルを除外可能です。
D列(売上金額が記載された列)で空白以外を抽出する場合:
Sub FilterNonBlankNumber()
With ActiveSheet
If .AutoFilterMode = False Then
.Range("A1").AutoFilter
End If
.Range("A1").AutoFilter Field:=4, Criteria1:="<>"
End With
End Sub
数値列のゼロ(0)は空白ではないためゼロは表示対象となる点に注意してください。
✅ 空白以外フィルターの具体例(日付列の場合)
日付列でも "<>” を使用可能です。
C列(注文日が記載された列)で空白以外を抽出する場合:
Sub FilterNonBlankDate()
With ActiveSheet
If .AutoFilterMode = False Then
.Range("A1").AutoFilter
End If
.Range("A1").AutoFilter Field:=3, Criteria1:="<>"
End With
End Sub
✅ 入力されている日付がすべて抽出され、空白セルは除外されます。
✅ 複数条件と組み合わせて「空白以外」フィルターをかける方法
例えばB列で「空白以外」、D列で「売上金額100000以上」のデータだけを抽出したい場合は以下のように記述します。
Sub FilterNonBlankAndSales()
With ActiveSheet
If .AutoFilterMode = False Then
.Range("A1").AutoFilter
End If
' B列が空白以外
.Range("A1").AutoFilter Field:=2, Criteria1:="<>"
' D列が100000以上
.Range("A1").AutoFilter Field:=4, Criteria1:=">=100000"
End With
End Sub
✅ 複数列へ個別にフィルターをかけることでAND条件フィルターが可能
✅ 空白除外しつつ、特定条件でのデータ抽出ができるため実務で非常に有用です。
✅ 全シートへ「空白以外」フィルターを一括設定する方法
複数のシートで同じ列に「空白以外」フィルターをかけたい場合は以下のようにループ処理を使うと便利です。
Sub FilterNonBlankAllSheets()
Dim ws As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each ws In ThisWorkbook.Worksheets
With ws
If .AutoFilterMode = False Then
.Range("A1").AutoFilter
End If
.Range("A1").AutoFilter Field:=2, Criteria1:="<>"
End With
Next ws
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
✅ 全シートへ漏れなくフィルターをかけられる
✅ 計算・画面更新を一時停止することで高速処理可能
■ フィルター解除と併用する際の注意点
「空白以外フィルター」の前に古いフィルター条件が残っていると、誤動作する可能性があります。
そのため、以下のようにフィルター解除を先に実行してからフィルター設定する流れがおすすめです。
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
' フィルター設定
Range("A1").AutoFilter Field:=2, Criteria1:="<>"
✅ .ShowAllData :絞り込み解除(フィルターボタンは残る)
✅ .AutoFilterMode = False :フィルターボタンも削除しフィルター機能解除
作業フローに合わせて使い分けましょう。
■ 実務活用例:空白行除外して売上分析データを抽出
以下は売上管理データで、
✅ B列(担当者名)が空白でない行
✅ D列(売上)が100000以上
✅ C列(受注日)が「2025年7月」のみ
を抽出する具体例です。
Sub FilterSalesAnalysis()
Dim ws As Worksheet
Set ws = Worksheets("売上データ")
With ws
If .FilterMode Then .ShowAllData
If .AutoFilterMode = False Then .Range("A1").AutoFilter
.Range("A1").AutoFilter Field:=2, Criteria1:="<>"
.Range("A1").AutoFilter Field:=4, Criteria1:=">=100000"
.Range("A1").AutoFilter Field:=3, Criteria1:=">=2025/07/01", Operator:=xlAnd, Criteria2:="<=2025/07/31"
End With
End Sub
✅ 定期レポート作成や特定条件でのデータ抽出を完全自動化可能
✅ 毎回の手作業での抽出作業を数秒で完了でき、ミスも防止
■ トラブル防止のポイント
✅ "<>” を使うだけで「空白以外」を簡単に設定可能
✅ 数値・文字列・日付でも使用可能(ゼロは空白扱いではない点に注意)
✅ フィルター前にフィルター解除処理を行うと誤動作防止
✅ フィルター適用範囲の見出しセル位置を正しく設定(多くの場合 "A1")
■まとめ:VBAで「空白以外フィルター」を活用し作業時間を大幅短縮
✅ Range("A1").AutoFilter Field:=対象列番号, Criteria1:="<>” で空白以外の抽出が可能
✅ 複数条件・AND条件と組み合わせて柔軟な抽出が可能
✅ フィルター解除処理と併用し安定運用
✅ 全シート・全ファイルへ一括適用可能でさらに効率化
✅ 定期レポート・チェック作業・集計処理を完全自動化可能
この方法をマスターすれば日々のルーチン作業を即時化し、作業時間とミスを大幅削減可能です。