1

Excel 2007 には、複数のピボット テーブルとピボット グラフを作成する Excel テーブルの形式の 1 つのデータセットがあります。すべてのピボット テーブルとチャートで同時に「レポート フィルター」フィールドを同期できるようにしたいと考えています。これにより、(たとえば) ピボット テーブルの 1 つで US_Region フィールドを「太平洋岸北西部」にフィルタリングすることで、それが適用されます。ワークブック内のすべてのピボット テーブルとグラフ (単一のデータセットを共有する) にフィルター処理します。VBA を使用せずにこれを行う方法はありますか。ない場合、VBA で行うための最も柔軟で最も手間のかからない方法は何でしょうか?

ありがとう

4

1 に答える 1

2

すべてのページ フィールドを変更する手順を作成します。これはワークブック内のすべてのワークシートをループし、ワークシートにピボット テーブルがある場合は、サブに渡されたピボット テーブルのページ フィールドと一致するようにページ フィールドを変更します。

Sub ChangePage(pt As PivotTable)

    Dim strPageValue As String
    Dim wks As Worksheet
    Dim ptUpdate As PivotTable

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    strPageValue = pt.PivotFields("Area").CurrentPage

    For Each wks In ThisWorkbook.Worksheets

        On Error Resume Next
        Set ptUpdate = wks.PivotTables(1)

        If Err.Number = 0 Then
            On Error GoTo 0
            wks.PivotTables(1).PivotFields("Area").ClearAllFilters
            wks.PivotTables(1).PivotFields("Area").CurrentPage = strPageValue
        End If
        Err.Clear

    Next wks

    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

次に、ワークシート コード自体でこのプロシージャを呼び出し、変更したピボット テーブルを渡します。

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

    Call ChangePage(Target)

End Sub

ピボット フィールドの名前を「Area」から必要なページ フィールド (「US_Region」など) に変更します。

これは、他の方法でピボット テーブルの構造を頻繁に変更している場合には適していない可能性があります。これは、更新時を含め、ピボット テーブルが変更されるたびにトリガーされるためです。ユーザーが指定されたページ フィールドを削除した場合にも、エラーが発生します。

ただし、ピボット テーブルが静的な場合は、これで十分です。

于 2009-09-15T11:01:48.900 に答える