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

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

対象: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
 Dim ls As ListObject

 For Each sh In Worksheets
  For Each ls In sh.ListObjects
   ls.ShowAutoFilter = False
  Next ls
 Next sh

End Sub

すべてのワークシートにFor Each~Nextループを回して、
 For Each sh In Worksheets

各シートのすべてのテーブルにFor Each~Nextループを回して、
  For Each ls In sh.ListObjects

ListObjectのShowAutoFilterプロパティをFalseにしています。
   ls.ShowAutoFilter = False

[スポンサードリンク]

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

TrackBack:0

TrackBack URL
[スポンサードリンク]

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

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

検索

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

.