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 が出る場合、
- フィルターが設定されているが絞り込みがされていない
- フィルター自体が設定されていない
可能性があります。
その場合は以下のように**FilterMode
と AutoFilterMode
の両方を確認する条件分岐**を使うと安全です。
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
複数ブックを扱う大規模業務で便利な記述方法です。
■ フィルター解除を行う際の注意点
✅ 計算速度低下に注意
フィルター解除時、データ量が多いと再表示で数秒~数分かかることがあります。
その場合は以下のようにScreenUpdating
とCalculation
をオフにして処理速度を向上させます。
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' フィルター解除処理
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
✅ 処理順序に注意
- フィルター解除後に処理を行う
- データ加工後に再度フィルターを設定する場合はフィルター設定処理も準備する
を徹底することで安定した運用が可能です。
✅ 非表示列・非表示行の扱いに注意
フィルター解除時、非表示列・非表示行が解除されるわけではありません。別途 .EntireRow.Hidden = False
などで解除が必要です。
■まとめ:VBAでフィルター解除を確実に行い安定した処理を実現しよう
Excel VBAでフィルターを解除するには、
✅ AutoFilterMode = False
(設定自体の解除)
✅ ShowAllData
(絞り込み解除)
✅ 両方を併用し安全解除する
という基本を理解しておくことが重要です。
さらに、
✅ 全シート解除
✅ 特定シートだけ解除
✅ 高速化対応
を組み合わせることで、安定したフィルター解除処理が可能になります。
もし日々の業務で、
✅ フィルターが残っていて処理がうまく進まない
✅ 作業ごとにフィルターを手動で解除するのが面倒
✅ VBAで安定したフィルター管理ができるようになりたい
と感じている方は、この記事で解説した方法を使ってぜひ業務改善に役立ててください。