【ExcelVBA・マクロ】オートフィルターを解除する方法|絞り込みを一瞬で戻すマクロ【コピペOK】

オートフィルターを解除する方法 ExcelVBA

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でも活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました