• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL2007 VBAでピボットのフィルタ指定)

EXCEL2007 VBAでピボットのフィルタ指定

このQ&Aのポイント
  • EXCEL 2007 VBAでピボットテーブルを生成しようとしております。レポートフィルタで初期表示するデータフィールド「メーカー」の値も指定できればと思っております。「メーカー」には今回データで「A」「B」「C」「D」「E」とあったとして、「メーカー」...「A」と「C」だけで表示指定したいとして、下記操作で記録マクロを取ってみました。結果は希望通りなのですが、記録マクロを確認すると下記のように「A」と「C」で指定できておりません。これだとメーカー「F」のデータが追加された際、希望通りでないと思うのですが、良い方法をどなたかご存じないでしょうか?
  • EXCEL 2007 VBAでピボットテーブルのフィルタ指定をする方法についてお尋ねしたいです。現在、レポートフィルタのデータフィールド「メーカー」のデータを指定して表示したいと考えていますが、記録マクロのコードを確認すると、「A」と「C」だけで指定できておらず、将来的なデータの追加に対応できません。どなたか効果的な方法をご存じでしたら、教えていただきたいです。
  • EXCEL 2007 VBAを使用して、ピボットテーブルのフィルタ指定を設定したいと考えています。具体的には、レポートフィルタのデータフィールド「メーカー」の中から「A」と「C」のみを表示するように設定したいです。現在、記録マクロを確認してみると、「A」と「C」で指定されていないことがわかりました。これでは将来的なデータの追加に対応できないため、良い方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Ver2007でClearAllFiltersメソッドが追加されました。 繰り返して使う場合も想定して、ClearAllFiltersで一旦全表示にします。 その後、表示したいアイテムを指定して、それ以外(Case Else)は非表示、 という処理で良いかと思います。 Sub try()   Dim pf As PivotField   Dim p As PivotItem   Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")   pf.Orientation = xlPageField   pf.ClearAllFilters   For Each p In pf.PivotItems     Select Case p.Value     Case "A", "C" '表示アイテム名をカンマ区切りで指定     Case Else       p.Visible = False     End Select   Next End Sub Ver2007以降でないと動作しません。 2003でも使う可能性があるなら以下のようにPageFieldを再配置。 但し、再配置前に更新する必要があります。 Sub try_2()   Dim pf As PivotField   Dim p As PivotItem   Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")   pf.Orientation = xlHidden   pf.Parent.PivotCache.Refresh   pf.Orientation = xlPageField   For Each p In pf.PivotItems     Select Case p.Value     Case "A", "C" '表示アイテム名をカンマ区切りで指定     Case Else       p.Visible = False     End Select   Next End Sub

kanegon0224
質問者

お礼

ありがとうございます!望みどおりに出力することが出来ました!! ループ処理で指定値でなければ、非表示にするとは考え及びませんでした。 検証・御礼が遅くなり申し訳ございません。 一番目のコードを使わせていただきます。 Excel2003化を渋っている人間がいるので、 これを人質にバージョンアップさせることも出来るので大助かりです。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

ぁ、そうだ。 PivotFields("メーカー")のItem数が数百を超える場合は 1件ずつ非表示にしていくとワークシート表示がもたついてかなり遅いです。 その場合、Application.ScreenUpdatingプロパティで表示を制御してください。 それでも遅い場合は、一旦RowFieldに配置してまとめて処理します。 1個だけ仮表示アイテムとして残してそれ以外まとめて非表示にし、 表示アイテムの処理をした後にPageFieldに配置するような感じです。 ちょっと難解かもしれませんが書いておきますね。 Sub try_3()   Const Lst = "A,C" '表示アイテム名をカンマ区切りで指定   Dim pf As PivotField   Dim r  As Range   Dim n  As Long   Dim x  As String   Dim s() As String   Dim si   Application.ScreenUpdating = False   Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")   '行フィールドに配置   pf.Orientation = xlRowField   '最左列配置   pf.Position = 1   Set r = pf.DataRange   'データ範囲の1つめのセルを仮表示アイテムとして値を記憶   x = r.Item(1).Value   n = r.Cells.Count - 1   If n > 0 Then     '仮表示アイテムだけ残してまとめて非表示     r.Resize(n).Offset(1).Delete   End If   '表示アイテム処理   s = Split(Lst, ",")   On Error Resume Next   For Each si In s     pf.PivotItems(si).Visible = True   Next   On Error GoTo 0   '記憶しておいた仮表示アイテムの処理   If IsError(Application.Match(x, s, 0)) Then     pf.PivotItems(x).Visible = False   End If   'ページフィールドに配置   pf.Orientation = xlPageField   Application.ScreenUpdating = True End Sub

関連するQ&A

専門家に質問してみよう