首页 文章

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

提问于
浏览
0

编辑

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 With ActiveSheet.PivotTables(“Volume”) . PivotFields(“Created Month”) . Orientient = xlColumnField .Position = 1

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

2 回答

  • 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
    
  • 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
    

相关问题