使用VBA过滤具有多个条件的Excel数据透视表

时间:2013-09-25 22:45:45

标签: excel-vba vba excel

已编辑

IF选择屏幕字段(工作表)范围N3 =每月,

我需要按工作表分组的工作表','前10名账单','前10名企业社会责任',前10个类别',前10名创建',以删除数据透视表中的值,然后插入'创建月' 。然后全部刷新。

IF选择屏幕字段(工作表)范围N3 =每周,

我需要按工作表分组的工作表','前10名账单','前10名企业社会责任',前10个类别',前10名创建'以删除数据透视表中的值,然后插入'周数' 。然后全部刷新,其中显示的唯一字段将来自选择屏幕范围A2,B2,C2,D2,E2和F2,它们永远不会是空白。

在任何字段中都不会出现任何空白,这些是选择屏幕字段(工作表)的唯一2个选项

...最大

在第一张纸上,我添加了一个下拉菜单,可以选择每月或每周。我在“选择屏幕字段”(工作表)上有这个值。然后我有另外5个工作表,它们上面有数据透视表。如果他们选择每月,我希望每个透视表清除所有过滤器,然后清除列标签并添加创建月...当运行宏,然后查看我得到的结果:

ActiveSheet.PivotTables(“Volume”)。PivotFields(“Week Number”)。Orientation = _         xlHidden     使用ActiveSheet.PivotTables(“Volume”)。PivotFields(“Created Month”)         .Orientation = xlColumnField         .Position = 1

但是当选择Weekly时,我需要它来做同样的事情,而是显示'Week Number',然后让Pivot表过滤器只显示6周。该值将基于“选择屏幕字段”,A2,B2,C2,D2,E2和F2。目前显示的是39,38,37,36,35,34。

2 个答案:

答案 0 :(得分:1)

我认为我们现在拥有它...如果其中一个表格中的pivottablename不是“音量”,请改变它。 周过滤器不搜索所有提到的字段,但过滤周数大于/等于A2

Sub start()
Call pivotchange("Tickets by Group", "Volume")
Call pivotchange("Top 10 Bill tos", "Volume")
Call pivotchange("Top 10 CSRs", "Volume")
Call pivotchange("Top 10 Categories", "Volume")
Call pivotchange("Top 10 Created by' ", "Volume")
End Sub

Sub pivotchange(sheetname As String, pivottablename As String)
On Error Resume Next
Dim week_filter As String
Dim pt As PivotTable
Set pt = Sheets(sheetname).PivotTables(pivottablename)
    pt.ClearAllFilters
    pt.PivotFields("week").Orientation = xlHidden
    pt.PivotFields("month").Orientation = xlHidden

If Sheets("Select Screen Field").Range("N3").Value = "weekly" Then
    With pt.PivotFields("week")
        .Orientation = xlColumnField
        .Position = 1
    End With
week_filter = Sheets("Select Screen Field").Range("A2").Value
    pt.PivotFields("week").PivotFilters.Add _
        Type:=xlCaptionIsGreaterThanOrEqualTo, Value1:=week_filter
    pt.PivotFields("week").AutoSort xlAscending, "week"
End If
If Sheets("Select Screen Field").Range("N3").Value = "monthly" Then
    With pt.PivotFields("month")
        .Orientation = xlColumnField
        .Position = 1
    End With
    pt.PivotFields("week").AutoSort xlAscending, "month"
End If
pt.RefreshDataSourceValues
pt.RefreshTable
End Sub

答案 1 :(得分:0)

G3中至少需要一个有效值:G7,否则会出错:

Dim pf As PivotField, pi As PivotItem

Set pf = ActiveSheet.PivotTables("Tickets by Group").PivotFields("Volume")
pf.ClearAllFilters
pf.EnableMultiplePageItems = True

For Each pi In pf.PivotItems
    pi.Visible = Not IsError(Application.Match(pi.Caption, Range("G3:G7"), 0))
Next pi