VBAで自動化 VBA一覧 フィルタリング 抽出・検索処理

【VBA】「フィルター 空白以外」を設定する方法|空白を除外してデータ抽出する自動化手法

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)は空白ではないためゼロは表示対象となる点に注意してください。


【VBA】空白セルを削除して上詰めする方法

✅ 空白以外フィルターの具体例(日付列の場合)

日付列でも "<>” を使用可能です。

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

✅ 定期レポート作成や特定条件でのデータ抽出を完全自動化可能
✅ 毎回の手作業での抽出作業を数秒で完了でき、ミスも防止


【VBA】データ抽出の条件の決め方のコツとポイント

■ トラブル防止のポイント

"<>” を使うだけで「空白以外」を簡単に設定可能
✅ 数値・文字列・日付でも使用可能(ゼロは空白扱いではない点に注意)
✅ フィルター前にフィルター解除処理を行うと誤動作防止
✅ フィルター適用範囲の見出しセル位置を正しく設定(多くの場合 "A1"


■まとめ:VBAで「空白以外フィルター」を活用し作業時間を大幅短縮

Range("A1").AutoFilter Field:=対象列番号, Criteria1:="<>” で空白以外の抽出が可能
✅ 複数条件・AND条件と組み合わせて柔軟な抽出が可能
✅ フィルター解除処理と併用し安定運用
✅ 全シート・全ファイルへ一括適用可能でさらに効率化
✅ 定期レポート・チェック作業・集計処理を完全自動化可能

この方法をマスターすれば日々のルーチン作業を即時化し、作業時間とミスを大幅削減可能です。

    -VBAで自動化, VBA一覧, フィルタリング, 抽出・検索処理