全シートに設定されているすべてのフィルタをクリアします。
※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アドインの設定法はこちら。
実際にどんな処理になるか説明をしていきます。
具体例
この状態で、アドインを実行します(コードは前述)。
利用のメリット
ブック全体の検索をかけたとき、フィルタがかかって除外されているものは検索に引っかかりません。シート数が少なければ手動で1つずつクリアすればよいのですが、数が20、30となってくると時間もかかりますし、クリア漏れも発生します。
一度アドインを設定しておけばシート数がどんなに増えてもボタン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の「メニュー→挿入→テーブル」で
作成したテーブルが対象になっていると解釈しました。
早速にありがとうございます。
試してみました、まさにこちらで解決致しました!
不慣れなので、こちらの記事はとても参考になりました。
追加でご教示もいただき、大変感謝です!ありがとうございました!
コメントありがとうございます。
解決できたようでよかったです。