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

【VBA】オートフィルターを解除する方法を徹底解説|トラブル防止と業務効率化

Excelで大量データの抽出や管理を効率化するために使われるオートフィルターですが、VBAで自動処理を組む際に「フィルター解除がうまくできない」「フィルターが残ったまま処理が進んでしまう」「解除方法による動作の違いがわからない」と悩む方は多いです。

この記事では、「Excel VBAでフィルターを正しく解除する方法」に特化し、

✅ オートフィルター解除の基本構文
✅ よく使う実務例
✅ フィルターが解除できない原因と対処法
✅ 処理速度を落とさず安定動作させるコツ

まで丁寧に解説します。

日々の手作業を減らし、安定したフィルター制御でトラブルなく運用したい方は、ぜひ最後までお読みください。


✅  VBAでフィルター解除する基本構文

Excel VBAでオートフィルターを解除する場合、最も基本となる構文は以下の通りです。

If ActiveSheet.AutoFilterMode Then
    ActiveSheet.AutoFilterMode = False
End If

この処理は、

  • フィルターが設定されている場合のみ解除する
  • フィルターが設定されていない場合は何もせず進む

という安全な書き方です。


✅ .ShowAllData を使ったフィルター解除

フィルター解除には .ShowAllData を使う方法もあります。

If ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
End If

この処理はフィルターでデータが絞り込まれている状態を解除し、すべてのデータを表示する動作です。

・2つの違い

メソッド動作注意点
AutoFilterMode = Falseフィルターの設定自体を解除フィルターボタンも非表示になる
ShowAllDataデータの絞り込みのみ解除フィルターボタンは残る

目的に合わせて使い分けることが重要です。


✅  フィルター解除ができない・エラーになる場合の原因と対処法

・ エラー 1004 が出るケース

ActiveSheet.ShowAllData を実行した際にエラー 1004 が出る場合、

  • フィルターが設定されているが絞り込みがされていない
  • フィルター自体が設定されていない

可能性があります。

その場合は以下のように**FilterModeAutoFilterMode の両方を確認する条件分岐**を使うと安全です。

With ActiveSheet
    If .FilterMode Then
        .ShowAllData
    End If
    If .AutoFilterMode Then
        .AutoFilterMode = False
    End If
End With

このように書くことで、

✅ 絞り込み解除
✅ フィルター設定解除

の両方を安全に行えます。


【VBA】RangeクラスのSelectメソッドが失敗しました:1004

✅  実務で使うフィルター解除付き処理例

・ データ更新前にフィルターを解除する例

複数行のデータ更新や削除処理をVBAで実行する際、フィルターがかかっている状態だと処理対象が限定されてしまうリスクがあります。

そのため、処理前にフィルターを解除することが重要です。

Sub FilterClearAndUpdate()
    ' フィルター解除
    With ActiveSheet
        If .FilterMode Then .ShowAllData
        If .AutoFilterMode Then .AutoFilterMode = False
    End With

    ' データ更新処理例
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    Dim i As Long
    For i = 2 To lastRow
        Cells(i, 3).Value = Cells(i, 2).Value * 1.1 ' B列の値をC列に1.1倍でコピー
    Next i
End Sub

このように処理前に確実にフィルターを解除することで、処理漏れや想定外の動作を防止できます。


【VBA】オートフィルターを「設定のみ」行う方法を徹底解説|解除しないで条件だけ変更・適用

✅  特定シートだけフィルター解除する方法

複数のシートにフィルターが設定されている場合でも、特定シートのみ解除したい場合は以下のように記述します。

Sub ClearFilterSpecificSheet()
    Dim ws As Worksheet
    Set ws = Worksheets("売上データ")

    With ws
        If .FilterMode Then .ShowAllData
        If .AutoFilterMode Then .AutoFilterMode = False
    End With
End Sub

この書き方で、処理対象のシートを間違えずにフィルター解除が可能になります。


【Excel】重複データを完全に削除して一切残さない方法|関数・フィルター・VBAによる実践的アプローチ

✅  全シートのフィルターを一括解除する方法

一括解除したい場合は以下のようにループで全シートを回してフィルターを解除できます。

Sub ClearAllSheetsFilters()
    Dim ws As Worksheet
    For Each ws In Worksheets
        With ws
            If .FilterMode Then On Error Resume Next: .ShowAllData: On Error GoTo 0
            If .AutoFilterMode Then .AutoFilterMode = False
        End With
    Next ws
End Sub

複数ブックを扱う大規模業務で便利な記述方法です。


■  フィルター解除を行う際の注意点

計算速度低下に注意
フィルター解除時、データ量が多いと再表示で数秒~数分かかることがあります。
その場合は以下のようにScreenUpdatingCalculationをオフにして処理速度を向上させます。

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

' フィルター解除処理

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

処理順序に注意

  • フィルター解除後に処理を行う
  • データ加工後に再度フィルターを設定する場合はフィルター設定処理も準備する

を徹底することで安定した運用が可能です。

非表示列・非表示行の扱いに注意
フィルター解除時、非表示列・非表示行が解除されるわけではありません。別途 .EntireRow.Hidden = False などで解除が必要です。


■まとめ:VBAでフィルター解除を確実に行い安定した処理を実現しよう

Excel VBAでフィルターを解除するには、

AutoFilterMode = False(設定自体の解除)
ShowAllData(絞り込み解除)
✅ 両方を併用し安全解除する

という基本を理解しておくことが重要です。

さらに、

✅ 全シート解除
✅ 特定シートだけ解除
✅ 高速化対応

を組み合わせることで、安定したフィルター解除処理が可能になります。


もし日々の業務で、

✅ フィルターが残っていて処理がうまく進まない
✅ 作業ごとにフィルターを手動で解除するのが面倒
✅ VBAで安定したフィルター管理ができるようになりたい

と感じている方は、この記事で解説した方法を使ってぜひ業務改善に役立ててください。

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