「excel vba テーブルのフィルター解除」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
テーブルではない通常のセル範囲に設定されたオートフィルターの場合は、WorksheetオブジェクトのAutoFilterModeプロパティを、
Falseにすることで、オートフィルターを解除することができます。
しかし、テーブルのフィルターは、「Worksheet.AutoFilterMode = False」では解除できません。
「excel vba テーブルのフィルター解除」
という検索キーワードは、このテーブルのフィルター解除を行うVBA(Visual Basic for Applications)のコードを探していた方によるものでしょう。
結論から言うと、テーブルのフィルターを解除するには、ListObjectオブジェクトのShowAutoFilterプロパティを、
Falseにする必要があります。
テーブルのフィルターを解除するサンプルマクロ
具体的には以下のようなマクロで、アクティブなブックの、アクティブなワークシートの、一つ目のテーブルのフィルターを解除できます。
ActiveSheet.ListObjects(1).ShowAutoFilter = False
End Sub
上記のマクロで利用しているオブジェクトモデルの階層関係は下図のとおりです。
ActiveSheetプロパティでアクティブなWorkbookのアクティブなWorksheetオブジェクトを取得して、WorksheetオブジェクトのListObjectsプロパティでアクティブなWorksheet上のすべてのテーブルを表すListObjectsコレクションオブジェクトを取得して、ListObjectsコレクションオブジェクトのデフォルトプロパティに「1」を指定することで、アクティブなシートの一つ目のテーブルを表すListObjectオブジェクトを取得して、ListObjectオブジェクトのShowAutoFilterプロパティをFalseに設定することで、フィルターを解除しています。
アクティブなブックの全テーブルのフィルターを解除するサンプルマクロ
以下のようなマクロにすれば、アクティブなブックのすべてのテーブルのフィルターを解除(非表示に)できます。
Dim sh As Worksheet
For Each sh In Worksheets
Dim ls As ListObject
For Each ls In sh.ListObjects
ls.ShowAutoFilter = False
Next ls
End Sub
すべてのワークシートにFor Each~Nextループを回して、
Dim sh As Worksheet
For Each sh In Worksheets
各シートのすべてのテーブルにFor Each~Nextループを回して、
Dim ls As ListObject
For Each ls In sh.ListObjects
ListObjectのShowAutoFilterプロパティをFalseにしています。
ls.ShowAutoFilter = False
最終更新日時:2019-08-07 4:25
Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » VBAでListObject・テーブルのフィルターを解除する