Home » エクセルマクロ・Excel VBAの使い方 » ピボットテーブル » VBAでピボットテーブルのフィルターを全てクリア・解除する

VBAでピボットテーブルのフィルターを全てクリア・解除する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba ピボットテーブル フィルタ解除」
「vba ピボットテーブル フィルタ 外す false」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

最近のExcelでは、[ピボットテーブルツール]-[分析]タブ-[アクション]グループ-[クリア]-[フィルターのクリア]コマンドから、

ピボットテーブルのフィルターをクリア・解除するExcelマクロ

ピボットテーブルのフィルターを解除することができます。

「vba ピボットテーブル フィルタ解除」
「vba ピボットテーブル フィルタ 外す false」
という検索をなさった方は、この[フィルターのクリア]コマンドと同じことを、VBAから行うには、どのようなコードを書けばいいのかを探していらしたのでしょう。

[スポンサードリンク]

ピボットテーブルのフィルターをクリア・解除するサンプルマクロ

以下のようなSubプロシージャで、アクティブなシート上に存在するピボットテーブルのフィルターを、すべてクリアできます。
Sub ピボットテーブルのフィルターを解除する()
 Dim pvt As PivotTable
 For Each pvt In ActiveSheet.PivotTables
  pvt.ClearAllFilters
 Next pvt
End Sub

PivotTableオブジェクトにはCleaAllFiltersというメソッド(!)が用意されているので、

ピボットテーブルのフィルターをクリア・解除するExcelマクロ

これをFor Each~Nextループの中で呼んでいます。

何故PivotTablesではなくObjectを返す作りになっているのでしょう?

上記のマクロでは、ワークシート上に複数のピボットテーブルが存在する可能性も考えてFor Each~Nextループを回していますが、ピボットテーブルが1個しか存在していなければ、
  ActiveSheet.PivotTables(1).ClearAllFilters
という1行だけで、アクティブなワークシート上のピボットテーブルのフィルターをすべてクリアできてしまいます。

ところがここで利用している、ActiveSheetプロパティも、

ピボットテーブルのフィルターをクリア・解除するExcelマクロ

Worksheet.PivotTablesメソッドも、

ピボットテーブルのフィルターをクリア・解除するExcelマクロ

いずれも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でピボットテーブルのフィルターを全てクリア・解除する

「ピボットテーブル」の記事一覧

検索


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

.