我需要根据两个不同单元格中的值过滤数据透视表。
每个单元格都会在数据透视表中过滤不同的字段。
我知道如何根据一个单元格中的值过滤数据透视表。
但是,我不知道如何添加第二个过滤器。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xptable As PivotTable
Dim xpfile As PivotField
Dim xstr As String
On Error Resume Next
If Intersect(target, Range("H6:H7")) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xptable = Worksheets("Sheet11").PivotTables("PivotTable2")
Set xpfile = xptable.PivotFields("FilterField")
xstr = target.Text
xpfile.ClearAllFilters
xpfile.CurrentPage = xstr
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:1)
您的数据透视表(Dim xptable As PivotTable
)可以通过其名称或工作表中的编号来寻址,例如。 g。
Set xptable = Worksheets("Given Name of Sheet3").PivotTables("PivotTable3")
Set xptable = Worksheets("Given Name of Sheet3").PivotTables(1)
Set xptable = Sheet3.PivotTables(1) ' or just use codename of Sheet3
您的过滤器字段(Dim xpfile As PivotField
)可以寻址为PivotField
或PageField
。这几乎是相同的,但我建议使用后者以更好地进行识别。 e。 g。
Set xpfile = xptable.PivotFields("MyFirstFilterFieldName")
Set xpfile = xptable.PageFields("MyFirstFilterFieldName")
Set xpfile = xptable.PageFields(1)
要过滤单个条目,请将页面字段的CurrentPage
设置为有效PivotItem
的标题。您必须通过循环遍历其所有PivotItems
来确保标题存在(否则会出现错误)。
Dim xpitem As PivotItem
With xpfile
.ClearAllFilters
For Each xpitem In .PivotItems
If xpitem.Caption = ... Then
.CurrentPage = ...
Exit For
End If
Next xpitem
如果要通过更改特定单元格来自动执行此操作,请将以下代码放在该工作表的代码模块中,即单元格输入的位置 (而不是数据透视表是)。
Target
代表更改范围的单元格范围。由于它可能更大(例如,某人从剪贴板复制了较大范围到工作表),因此您必须按Intersect
进行检查,如果您的单元格已更改,然后使用单个单元格的值。
在工作表的代码模块中,您通过Me
引用了相应的工作表。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xptable As PivotTable
Dim xpfile As PivotField
Dim xpitem As PivotItem
Set xptable = Sheet3.PivotTables("PivotTable3")
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
Set xpfile = xptable.PageFields(1)
With xpfile
.ClearAllFilters
For Each xpitem In .PivotItems
If xpitem.Caption = Me.Range("A1").Value Then
.CurrentPage = Me.Range("A1").Value
Exit For
End If
Next xpitem
End With
ElseIf Not Intersect(Target, Me.Range("A2")) Is Nothing Then
' like above
End If
End Sub
如果您需要一个包含多个项的过滤器,则必须EnableMultiplePageItems
并隐藏所有不需要的枢轴项-但必须确保,始终至少一个枢轴项< / em>保持可见,e。 g。
Dim AtLeastOneVisible As Boolean
With myPivotTable.PageFields(1)
.ClearAllFilters
.EnableMultiplePageItems = True
AtLeastOneVisible = False
For Each myPivotItem In .PivotItems
If myPivotItem .Caption = ... Or myPivotItem .Caption = ... Then
AtLeastOneVisible = True
Exit For
End If
Next myPivotItem
If AtLeastOneVisible Then
For Each myPivotItem In .PivotItems
If myPivotItem .Caption <> ... And myPivotItem .Caption <> ... Then
pi.Visible = False
End If
Next myPivotItem
End If
End With