全シートのフィルタをクリアする(Excel)

スポンサーリンク

全シートに設定されているすべてのフィルタをクリアします。
※1:アドインを利用します。
※2:フィルタの削除ではありません。
※3:アクティブシートのみのフィルタのクリアではありません。
※4:フィルタ削除のことを「解除」と表現する方もいますが、ここでは「削除」で統一します。


コード(VBAです)

Sub ClearAllFilters()

  Dim WS As Worksheet

  For Each WS In Worksheets
    If WS.FilterMode Then
      WS.ShowAllData
    End If
  Next
  MsgBox ("全シートのフィルタをクリアしました。")

End Sub

コードがある場合のVBAアドインの設定法はこちら


実際にどんな処理になるか説明をしていきます。

具体例

Before1

複数のシートを準備します。

Before2

適当にフィルタをかけます。

この状態で、アドインを実行します(コードは前述)。

After1

全シートの処理で時間がかかることもあるため、完了のメッセージボックスを表示させてあります。お好みでコードから削除してください。

After2

全シートのフィルタがクリアされました。


利用のメリット

ブック全体の検索をかけたとき、フィルタがかかって除外されているものは検索に引っかかりません。シート数が少なければ手動で1つずつクリアすればよいのですが、数が20、30となってくると時間もかかりますし、クリア漏れも発生します。
一度アドインを設定しておけばシート数がどんなに増えてもボタン1つで数秒で全シートのフィルタをクリアできます。


念の為の注釈

下の赤枠内の「クリア」はアクティブシートのみなので今回の課題は解決できません。

コメント

  1. ヨシカワ より:

    とても参考になりました。
    1点追加でご教示願いたいことがありまして。
    複数シートで、さらにそれぞれのシート内にテーブルがいくつか設定されている状態ですと、ファイル内一括クリアといかず、それぞれのテーブル内にカーソルをもっていかないとクリアできませんでした。
    こちら、全シートかつ全テーブルをすべて一括クリア する方法はご存じでしょうか。

    • 管理人 より:

      コメントありがとうございます。
      以下のコードで手元で動くことを確認しました。

      ———————————————
      Sub ClearAllFilters_MultiTables()

      Dim WS As Worksheet
      Dim TBL As ListObject

      For Each WS In Worksheets
      If WS.FilterMode Then
      WS.ShowAllData
      End If
      For Each TBL In WS.ListObjects
      If Not TBL.AutoFilter Is Nothing Then
      TBL.AutoFilter.ShowAllData
      End If
      Next TBL
      Next WS

      MsgBox (“全シートのフィルタをクリアしました。”)

      End Sub
      ———————————————

      記事のコードでは、単純な表が1つだけ存在するシートが複数あるという想定でした。
      ご質問の「シート内にテーブルがいくつか」というところから、Excelの「メニュー→挿入→テーブル」で
      作成したテーブルが対象になっていると解釈しました。

      • ヨシカワ より:

        早速にありがとうございます。
        試してみました、まさにこちらで解決致しました!
        不慣れなので、こちらの記事はとても参考になりました。
        追加でご教示もいただき、大変感謝です!ありがとうございました!