【问题标题】:Filter by multiple conditons pivot VBA按多个条件过滤VBA
【发布时间】:2016-02-09 18:07:09
【问题描述】:

我在数据透视表上有四个过滤器,week_of_year(1,2 到 52),日期(2012 年 1 月 1 日到 2016 年 2 月 7 日),年(2012 年到 2016 年),城市(纽约到旧金山)

Sub datefilter()
Dim PvtTbl As PivotTable
Set PvtTbl = Worksheets("test").PivotTables("PivotTable3")
Dim pf As PivotField
Dim pf1 As PivotField
Dim PI As PivotItem
Set pf =              
Worksheets("test").PivotTables("PivotTable3").PivotFields("week_of_year")
Set pf1 =       
Worksheets("test").PivotTables("PivotTable3").PivotFields("year")
Set pf2 =       
Worksheets("test").PivotTables("PivotTable3").PivotFields("Date")
Set pf3 =       
Worksheets("test").PivotTables("PivotTable3").PivotFields("city")

PvtTbl.ClearAllFilters

For Each PI In pf.PivotItems
If PI.Name = "7" Then
PI.Visible = True
Else
PI.Visible = False
End If
Next

For Each PI In pf1.PivotItems
If PI.Name = "2014" Or PI.Name = "2015" Then
PI.Visible = True
Else
PI.Visible = False
End If
Next

''Same for the Date,city, have multiple items selected as filter.
End Sub

这可行,但需要永远运行,因为它循环每条记录。尝试找到一种更有效的方法来做到这一点。任何人都可以使用 currentpage 或 pivotfield.add 来实现相同的目标吗?欣赏!!!非常感谢!

特殊要求:数据透视表链接到数据库。所以当新的日期闪现时,需要从过滤器中选择更多的日期。例如,如果 2/9/16 进入,也需要选择 data

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    您可以先对原始数据做更多的工作。听起来您只需要具有几个设定条件的数据。

    因此,您可以使用以下逻辑编写将嵌套 if 语句放入新列的 VBA:

    =if(or("YOUR FIELD"=2014, "YOUR FIELD"=2014),"Yes",if("YOUR FIELD"=7,"Yes","No"))

    然后按此新公式列中等于“是”的所有内容进行过滤,然后将数据透视过滤器减少到一个开关。

    如果它是一个更大的数据集,并且您不希望公式占用您的内存,您也可以使用 For 循环来实现相同的效果。这实际上是我的首选方法。

    【讨论】:

    • 您建议在我的数据库链接顶部嵌入另一列?性能还是有点慢。顺便说一句,我如何使用 for 循环?感谢您的回复
    【解决方案2】:

    最有效的解决方案是在底层数据库中设置带有动态过程的存储过程,让您可以在数据库端过滤数据。然后,该 SP 可以在电子表格中的列表上绘制。见http://datapigtechnologies.com/blog/index.php/running-a-sql-stored-procedure-from-excel-with-dynamic-parameters/

    如果这不可能,我在http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/ 的文章中的代码可以满足您的需求,正如我在your other thread on this topic 已经概述的那样

    阅读该主题,您将了解如何大幅减少循环通过 PivotItem 并更改其状态所需的时间。

    另外,请注意,在您遍历 PivotItems 之前,您需要设置 PT。进行更改时将 .ManualUpdate 设置为 TRUE,然后将其设置回 FALSE 以避免每次更改后数据透视表都刷新。

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 2021-12-14
      • 1970-01-01
      • 2021-10-20
      • 2018-03-25
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多