これら4つのフィールドごとにスライサーを挿入できます。それらが追加されたら、Slicer Connectionsに行き、関連するすべてのピボットを選択することができます。
VBAを探している場合は、シート上のすべてのピボットをループし、すべてのレポートフィルタメンバーをループし、選択した値を配列に格納する必要があります。
また、隠しタブにスライサーを作成し、CUBERANKEDMEMBER関数を使用してスライサーのすべての選択を戻し、それを使用して配列を作成し、レポートのいずれかがピボットテーブルに適用されるようにすることができますフィルターの変更(ワークシートにWorksheet_PivotTableAfterValueChange手順を使用することができます)
ここでは、我々は2つのピボットテーブルでそれを行っている方法です。
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
''''variables for pivottable changed
Dim pivotname As String
Dim pivotname2 As String
Dim PT As PivotTable
Dim PT2 As PivotTable
''''variables for pivotrowfields
Dim pti As PivotItem
Dim pti2 As PivotField
''''variables for pagefilters
Dim PF As PivotField
Dim colPageFields As PivotFields
Dim aFilters As Variant
'''Un-enable events to avoid an endless loop
Application.EnableEvents = False
'''Set variables
pivotname = Target.Name
If pivotname = "PivotTable1" Then
pivotname2 = "PivotTable4"
Else
pivotname2 = "PivotTable1"
pivotname = "PivotTable4"
End If
If ActiveSheet.Name = "Slicer Setup" Then
Sheets("By Org Structure").Activate
End If
Set PT = ActiveSheet.PivotTables("" & pivotname & "")
Set PT2 = ActiveSheet.PivotTables("" & pivotname2 & "")
Set colPageFields = PT.PageFields
'''action for changing the filters on Page Fields
For Each PF In colPageFields
PF.CubeField.EnableMultiplePageItems = True
'PT2.PivotFields(PF.Name).CubeField.EnableMultiplePageItems = True
aFilters = PT.PivotFields(PF.Name).VisibleItemsList
If aFilters(1) = "" Then
If PT.PivotFields(PF.Name).CubeField.AllItemsVisible = True Then
PT2.PivotFields(PF.Name).ClearAllFilters
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array("")
End If
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array(aFilters)
End If
Next
Set colPageFields = PT.RowFields
'''action for changing the filters on Row Fields
For Each PF In colPageFields
PF.CubeField.EnableMultiplePageItems = True
'PT2.PivotFields(PF.Name).CubeField.EnableMultiplePageItems = True
aFilters = PT.PivotFields(PF.Name).VisibleItemsList
If aFilters(1) = "" Then
If PT.PivotFields(PF.Name).CubeField.AllItemsVisible = True Then
PT2.PivotFields(PF.Name).ClearAllFilters
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array("")
End If
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array(aFilters)
End If
Next
'''Re-enable events to allow for this event macro to be kicked off again next time pivottables are changed
Application.EnableEvents = True
ActiveWorkbook.ShowPivotTableFieldList = False
End Sub
は、ピボットテーブルのフィールドをグループ化しているように、私はスライサーをリンクすることができないようで、 OLAPに基づいています。 VBAコードを調整するときに、私が持っているすべてのピボットテーブルを暗くし、それらのコードを複製する必要があると仮定するのは正しいですか? – onevba
forループまたはforループを使用してピボットをループするのは、もっときれいで短くなるでしょう。 –