ワークシート上にあるすべてのフィルターをクリアする方法を解説します。
といっても通常のオートフィルターは複数設置できませんので、
下記シートのような「テーブルとフィルターが混在したシート」において、
すべてのフィルターをクリアする方法の解説になります。

ソースコード
' 全フィルター(テーブル&通常)のクリア Sub 対象シートの全フィルターをクリアする(ws対象シート As Worksheet) ' 本処理は選択セルの影響を受けるためまずはActivate ws対象シート.Activate ' すべてのテーブルのフィルターをクリア Dim テーブル As ListObject For Each テーブル In ws対象シート.ListObjects If Not テーブル.AutoFilter Is Nothing Then テーブル.AutoFilter.ShowAllData End If Next ' 通常のフィルターは「テーブルがないセルを選択した状態」でないと取得できないため、 ' UsedRange外 = 絶対にテーブルではないセルを選択 ws対象シート.Cells(1, ws対象シート.UsedRange.Columns.Count + 1).Select ' 通常のフィルターを解除 If ws対象シート.AutoFilterMode = True Then ws対象シート.AutoFilter.ShowAllData End If End Sub
解説
シート上に存在するすべてのAutoFilterオブジェクトを取得し、
そこからShowAllDataメソッドを実行しているコードです。
ShowAllDataメソッドはWorksheetから実行する場合はどこかの列で抽出がかかっていないとエラーになってしまいますが、
AutoFilterから実行した場合はクリア済みでもエラーになりません。
' すべての列が既にクリアされている状態で Worksheets("○○").ShowAllData ' ← エラー Worksheets("○○").AutoFilter.ShowAllData ' ← 実行可(何も起きない)
問題はテーブルと通常フィルター混在時のフィルター取得問題で、
通常のフィルターを取得するにはテーブル以外のセルを選択する必要があります。
選択セルに影響されてしまうコードのため、
対象シートをActivateしてテーブルでないセルを探しています。
今回はUsedRangeの右側のセルを選択して実行しました。
テーブルと通常フィルターが混在したシートはいろいろと考慮することが増えます。
詳しくはこちらの記事をご覧ください。
www.limecode.jp