Excelでオートフィルターを使っていると、次のようなことはありませんか?
- 絞り込みを解除したい
- 毎回手作業でフィルターを戻すのが面倒
- マクロ実行前にフィルター状態をリセットしたい
このような場合は、VBAでオートフィルターを解除すると便利です。
ワンクリックでフィルター状態を元に戻せるので、データ整理や集計マクロの前処理としてよく使われます。
この記事でできること
- オートフィルターの絞り込みを解除できる
- フィルター自体を消す方法が分かる
- ShowAllData と AutoFilterMode の違いが分かる
- エラーになりにくい安全な書き方が分かる
まず結論:フィルター解除には2種類ある
VBAで「オートフィルターを解除する」といっても、実は意味が2つあります。
| やりたいこと | 使うコード |
|---|---|
| 絞り込みだけ解除して、フィルターの▼は残す | ShowAllData |
| フィルター機能そのものを消す | AutoFilterMode = False |
ここを理解しておくと、使い分けで迷わなくなります。
方法①:絞り込みだけ解除する(▼は残す)
まずは、絞り込みだけを解除したい場合のコードです。
Option Explicit
Sub ClearFilterOnly()
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
MsgBox "フィルターの絞り込みを解除しました。", vbInformation
End Sub
このコードでは、
- 絞り込み中なら解除する
- フィルターの▼ボタンは残る
という動きになります。
方法②:フィルター自体を完全に解除する
次は、オートフィルター機能そのものを消すコードです。
Option Explicit
Sub RemoveAutoFilter()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
MsgBox "オートフィルターを解除しました。", vbInformation
End Sub
このコードでは、シート上の▼ボタンも消えます。
ShowAllData と AutoFilterMode = False の違い
ShowAllData
- 絞り込みだけ解除する
- フィルターの▼は残る
- 再度条件を選んで絞り込みできる
AutoFilterMode = False
- フィルター機能自体を解除する
- ▼ボタンも消える
- 再度フィルターを設定し直す必要がある
どちらを使うべき?
実務では次のように考えると分かりやすいです。
- 絞り込み状態だけ戻したい → ShowAllData
- フィルターを完全に外したい → AutoFilterMode = False
エラーになりにくい安全な書き方
ShowAllData は、絞り込みがされていない状態で実行するとエラーになることがあります。
そのため、次のように FilterMode を確認してから実行するのが安全です。
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
この書き方にしておけば、余計なエラーを防げます。
よく使う実務向けコード(おすすめ)
「絞り込みされていたら解除、フィルター自体は残す」というケースが多いので、まずはこれを覚えておくのがおすすめです。
Option Explicit
Sub ResetFilter()
With ActiveSheet
If .FilterMode Then
.ShowAllData
End If
End With
End Sub
応用①:特定の表(ListObject)のフィルターを解除する
テーブル機能を使っている場合は、対象の表だけフィルター解除したいことがあります。
Option Explicit
Sub ClearTableFilter()
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects(1)
On Error Resume Next
tbl.AutoFilter.ShowAllData
On Error GoTo 0
MsgBox "テーブルのフィルターを解除しました。", vbInformation
End Sub
テーブルを使っている場合はこちらのほうが分かりやすいです。
応用②:複数シートのフィルターをまとめて解除する
ブック内のすべてのシートのフィルターを一括解除したい場合はこちらです。
Option Explicit
Sub ClearAllSheetFilters()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.FilterMode Then
ws.ShowAllData
End If
Next ws
MsgBox "すべてのシートのフィルターを解除しました。", vbInformation
End Sub
実務での活用例
- 集計マクロを実行する前に絞り込み状態を解除する
- データ加工前に一覧表示へ戻す
- 他の人がかけたフィルターを初期化する
- 毎回同じ形式で印刷・出力したいときの前処理
特に、データを自動処理するマクロでは、最初にフィルター解除を入れておくとトラブルが減ります。
よくあるエラーと対処法
① ShowAllDataでエラーになる
絞り込みされていない状態で実行するとエラーになることがあります。
そのため、次のように FilterMode を確認してください。
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
② フィルターが消えてしまった
AutoFilterMode = False を使うと、絞り込み解除ではなくフィルター自体が消えます。
▼を残したい場合は ShowAllData を使ってください。
③ コードは正しいのにエラーになる
Webからコピーしたコードの場合、記号が壊れていることがあります。
その場合は、該当行を削除して手入力し直すと解決することがあります。
まとめ
- オートフィルター解除には2種類ある
- 絞り込みだけ解除するなら
ShowAllData - フィルター自体を消すなら
AutoFilterMode = False - 実務ではエラー防止のため条件確認してから実行するのが安全
オートフィルター解除は、Excel自動化の中でもかなり使用頻度の高い処理です。
このコードを覚えておくだけで、集計やデータ整理のマクロがかなり安定します。
ぜひ実務のExcelでも活用してみてください。

コメント