[[20240125235321]] 『マクロのフィルタ解除について(テーブル、表)』(ぽぽ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロのフィルタ解除について(テーブル、表)』(ぽぽ)

教えてください。
Tableシートと表シートに下記のような表があります。
どちらのシートも同じリストがあります。
Tableシートではバナナにフィルタが掛けられており、表シートではみかんでフィルタがかかった状態です。
Tableシートは、テーブルに変換されています。
下記のコードのマクロをかけると、表シートのみフィルタ解除されますが、Tableシートでは解除されません。
調べると、ActiveSheet.ListObjects("テーブル1").ShowAutoFilter = Falseのように、テーブルでは解除方法が違うことが分かりました。
下記コードでCallで呼んでいるのですが、表シートは通常のフィルタ解除、Tableシートはテーブル用の解除方法と分けたい場合はどのように書けばいいでしょうか。また、テーブル名は必ず書かないとだめなものですか?Tableシートにテーブルが存在していれば解除するみたいに出来ないでしょうか。

 No.	果物
 1	みかん
 2	りんご
 3	みかん
 4	みかん
 5	バナナ
 6	みかん
 7	りんご

Sub フィルタ解除()

Dim Table As Worksheet
Dim 表 As Worksheet

Set Table = ThisWorkbook.Worksheets("Table")
Set 表 = ThisWorkbook.Worksheets("表")

Call 解除(Table)
Call 解除(表)

End Sub

Sub 解除(ws As Worksheet)

    If ws.FilterMode = True Then ws.ShowAllData
End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 >テーブル名は必ず書かないとだめなものですか?
同じシートにテーブルは複数作成可能なので
どのテーブルを操作するのか特定する為に必要です
名前の代わりに、1番目のテーブルなら
ActiveSheet.ListObjects(1)
でも可能です
 >テーブルが存在していれば
ListObjectsのCountプロパティで
テーブル数をカウント出来ます
(はてな) 2024/01/26(金) 05:29:50

 こうでしょうか?
 Sub test()
     Dim ws As Worksheet
     Dim tbl As ListObject
     For Each ws In Worksheets
         If ws.FilterMode = True Then ws.ShowAllData
         For Each tbl In ws.ListObjects
             tbl.ShowAutoFilter = False
         Next
     Next
 End Sub
(xyz) 2024/01/26(金) 07:55:39

皆さま
ありがとうございました!
テーブルでの解除方法、理解しました。
今回はテーブルが複数あり、かつ名前が分からないので、
for eachで巡回するやり方でできました。ありがとうございました。
(ぽぽ) 2024/01/26(金) 19:02:28

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.