すべてのページ フィールドを変更する手順を作成します。これはワークブック内のすべてのワークシートをループし、ワークシートにピボット テーブルがある場合は、サブに渡されたピボット テーブルのページ フィールドと一致するようにページ フィールドを変更します。
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」など) に変更します。
これは、他の方法でピボット テーブルの構造を頻繁に変更している場合には適していない可能性があります。これは、更新時を含め、ピボット テーブルが変更されるたびにトリガーされるためです。ユーザーが指定されたページ フィールドを削除した場合にも、エラーが発生します。
ただし、ピボット テーブルが静的な場合は、これで十分です。