「vba ピボットテーブル フィルタ解除」
「vba ピボットテーブル フィルタ 外す false」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
最近のExcelでは、[ピボットテーブルツール]-[分析]タブ-[アクション]グループ-[クリア]-[フィルターのクリア]コマンドから、
ピボットテーブルのフィルターを解除することができます。
「vba ピボットテーブル フィルタ解除」
「vba ピボットテーブル フィルタ 外す false」
という検索をなさった方は、この[フィルターのクリア]コマンドと同じことを、VBAから行うには、どのようなコードを書けばいいのかを探していらしたのでしょう。
ピボットテーブルのフィルターをクリア・解除するサンプルマクロ
以下のようなSubプロシージャで、アクティブなシート上に存在するピボットテーブルのフィルターを、すべてクリアできます。Dim pvt As PivotTable
For Each pvt In ActiveSheet.PivotTables
pvt.ClearAllFilters
Next pvt
End Sub
PivotTableオブジェクトにはCleaAllFiltersというメソッド(!)が用意されているので、
これをFor Each~Nextループの中で呼んでいます。
何故PivotTablesではなくObjectを返す作りになっているのでしょう?
上記のマクロでは、ワークシート上に複数のピボットテーブルが存在する可能性も考えてFor Each~Nextループを回していますが、ピボットテーブルが1個しか存在していなければ、
ActiveSheet.PivotTables(1).ClearAllFilters
という1行だけで、アクティブなワークシート上のピボットテーブルのフィルターをすべてクリアできてしまいます。
ところがここで利用している、ActiveSheetプロパティも、
Worksheet.PivotTablesメソッドも、
いずれもObjectを返す作りになってしまっているために、VBE(Visual Basic Editor)で、
ActiveSheet.PivotTables(1).
はもちろんのこと、
Worksheet型オブジェクト変数.PivotTables(1).
と入力したとしても、自動メンバー表示は行われません。残念ながら。
ActiveSheetプロパティの戻りがObjectとなっているのはやむを得ないとしても、MicrosoftがWorksheet.PivotTablesを、なぜ他の多くのコレクションを返すプロパティやメソッドのように作っておいてくれなかったのか疑問が残ります。
Worksheet.PivotTablesをPivotTablesコレクションオブジェクトを返すプロパティやメソッドにして、PivotTablesコレクションオブジェクトのデフォルトメンバーがPivotTableオブジェクトを返すように作っておいてくれれば、ピボットテーブル関連のコーディングで苦労する人は、もっと少なくて済んだように思うのです。
最終更新日時:2019-01-21 10:51
Home » エクセルマクロ・Excel VBAの使い方 » ピボットテーブル » VBAでピボットテーブルのフィルターを全てクリア・解除する