Excel VBA数据透视表过滤器

时间:2018-11-15 02:56:54

标签: excel vba excel-vba

我正在尝试为Microsoft Excel创建VBA代码,以从数据透视表中过滤掉很多项目(例如,每100个项目中有3个项目)。到目前为止,我一直在使用的方法是声明一些我不想为假的项目,例如:

.PivotItems("Item A").Visible = True
.PivotItems("Item B").Visible = True
.PivotItems("Item C").Visible = False
.PivotItems("Item D").Visible = False
.PivotItems("Item E").Visible = False

但是,将来这会变得很乏味,因为表中可能添加了更多项目,这意味着每次添加新项目时,我都需要编辑代码。

是否可以不使用

过滤出两个或多个项目
.Visible=false 

例如

pf.CurrentPage = "Item A" + "Item B" 

2 个答案:

答案 0 :(得分:0)

您必须调整数据透视表和字段名称,但这在我的测试中有效:

Sub filter_pivot()
    Dim i As Integer
    ActiveSheet.PivotTables("PivotTable1").ClearAllFilters
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("CLCL")
        For i = 1 To .PivotItems.Count
            Debug.Print .PivotItems(i)
            Select Case .PivotItems(i).Name
                Case Is = "Item C"
                    .PivotItems(i).Visible = False
                Case Is = "Item D"
                    .PivotItems(i).Visible = False
                Case Is = "Item E"
                    .PivotItems(i).Visible = False
            End Select
        Next i
    End With
End Sub

我们仍在使用.Visible,但是添加多少新项目都没关系。

答案 1 :(得分:0)

您可以使用一系列项目:

Dim arr() As Variant

' Array of items to be kept visible (or hidden depending on your code)
arr = Array("Item 1", "Item 2", "Item 2")

For Each itm In pt.PivotFields("Value").PivotItems
    If Not IsError(Application.Match(itm.Caption, arr, 0)) Then
        itm.Visible = True
    Else
        itm.Visible = False
    End If
Next