Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » VBAでListObject・テーブルのフィルターを解除する

VBAでListObject・テーブルのフィルターを解除する

対象:Excel2007, Excel2010, Excel2013

「excel vba テーブルのフィルター解除」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

テーブルではない通常のセル範囲に設定されたオートフィルターの場合は、WorksheetオブジェクトのAutoFilterModeプロパティを、

テーブルのフィルターを解除するExcelマクロ

Falseにすることで、オートフィルターを解除することができます。

しかし、テーブルのフィルターは、「Worksheet.AutoFilterMode = False」では解除できません。

「excel vba テーブルのフィルター解除」
という検索キーワードは、このテーブルのフィルター解除を行うVBA(Visual Basic for Applications)のコードを探していた方によるものでしょう。

結論から言うと、テーブルのフィルターを解除するには、ListObjectオブジェクトのShowAutoFilterプロパティを、

テーブルのフィルターを解除するExcelマクロ

Falseにする必要があります。

厳密にはフィルターの解除というよりは、テーブルの見出し行に表示される[▼]ボタンが非表示になります。
[スポンサードリンク]

テーブルのフィルターを解除するサンプルマクロ

具体的には以下のようなマクロで、アクティブなブックの、アクティブなワークシートの、一つ目のテーブルのフィルターを解除できます。

Sub テーブルのフィルターを解除する()
 ActiveSheet.ListObjects(1).ShowAutoFilter = False
End Sub

上記のマクロで利用しているオブジェクトモデルの階層関係は下図のとおりです。

テーブルのフィルターを解除するExcelマクロ

ActiveSheetプロパティでアクティブなWorkbookのアクティブなWorksheetオブジェクトを取得して、WorksheetオブジェクトのListObjectsプロパティでアクティブなWorksheet上のすべてのテーブルを表すListObjectsコレクションオブジェクトを取得して、ListObjectsコレクションオブジェクトのデフォルトプロパティに「1」を指定することで、アクティブなシートの一つ目のテーブルを表すListObjectオブジェクトを取得して、ListObjectオブジェクトのShowAutoFilterプロパティをFalseに設定することで、フィルターを解除しています。

アクティブなブックの全テーブルのフィルターを解除するサンプルマクロ

以下のようなマクロにすれば、アクティブなブックのすべてのテーブルのフィルターを解除(非表示に)できます。

Sub 全テーブルのフィルターを解除する()
 Dim sh As Worksheet
 For Each sh In Worksheets

  Dim ls As ListObject
  For Each ls In sh.ListObjects
   ls.ShowAutoFilter = False
  Next ls

 Next sh
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・テーブルのフィルターを解除する

「ListObjectオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.