簡體   English   中英

使用VBA篩選具有多個條件的Excel數據透視表

[英]Filter Excel pivot table with multiple criteria using VBA

已編輯

如果選擇屏幕字段(工作表)范圍N3 =每月,

我需要工作表“按組划分的票”,“排名前10的帳單”,“排名前10的CSR”,排名前10的類別,排名前10的創建者,以刪除數據透視表中的值,然后插入“創建月份”。 然后全部刷新。

如果選擇屏幕字段(工作表)范圍N3 =每周,

我需要工作表“按組划分的票”,“排名前10的帳單”,“排名前10的CSR”,排名前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

但是,當選擇“每周”時,我需要執行相同的操作,但要顯示“周數”,然后使“數據透視表”過濾器僅顯示6周。 該值將基於“選擇屏幕字段”,A2,B2,C2,D2,E2和F2。 當前顯示為39、38、37、36、35、34。

我認為我們現在有了它...如果數據透視表名稱在其中一張表格中不是“ volume”,則進行更改。 周過濾器不是搜索所有提到的字段,而是過濾周大於/等於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

您在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM