【问题标题】:Excel VBA Pivot Table FilterExcel VBA 数据透视表筛选器
【发布时间】:2018-11-15 02:56:54
【问题描述】:

我正在尝试为 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" 

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以使用一组项目:

    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
    

    【讨论】:

    • 这正是我想要的!非常感谢!
    【解决方案2】:

    您必须调整数据透视表和字段名称,但这适用于我的测试:

    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,但添加多少新项目并不重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 2013-07-02
      • 2012-05-14
      • 2020-11-22
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多