VBA:根据单元格值过滤数据透视表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA:根据单元格值过滤数据透视表相关的知识,希望对你有一定的参考价值。
我有一个数据透视表,我想根据最近两天动态过滤(所以1月4日是1月2日和3日)。我已经下载了VBA代码以插入最新的数据透视数据(进入HISTORICALS表)。然后,我检索最后两天(变量定义为Highest_Max和Second_Highest_Max)。
我的想法是将两个最新的日期粘贴到PIVOT表格中的单元格中(枢轴所在的位置),并根据这些单元格中的值过滤枢轴(B34和B35)。不幸的是,过滤选项是我的代码卡住的地方:
Sub Select_Last_Two_Days()
With Worksheets("HISTORICALS")
' select the two newest dates
Highest_Max = Format(WorksheetFunction.Max(.Range("A:A")), "Short Date")
Second_Highest_Max = Format(WorksheetFunction.Large(.Range("A:A"), WorksheetFunction.CountIf(.Range("A:A"), WorksheetFunction.Max(.Range("A:A"))) + 1), "Short Date")
Debug.Print Highest_Max, Second_Highest_Max
' paste results into cells in PIVOT sheet
Worksheets("PIVOT").Range("B34").Value = Highest_Max
Worksheets("PIVOT").Range("B35").Value = Second_Highest_Max
End With
' update pivot according to cell values (B34/B35)
With Worksheets("PIVOT").PivotTables(PivotTable1)
.PivotFields("ipg:date").ClearAllFilters
.PivotFields("ipg:date").PivotFilters.Add Type:=xlCaptionEquals, Value1:=[B34].Value, Value2:=[B35].Value
End With
End Sub
我收到以下错误:“无法获取Worksheet类的数据透视表属性。”
当我单击debug时,以下行显示错误:
With Worksheets("PIVOT").PivotTables(PivotTable1)
知道我做错了什么吗?一直在研究过去几个小时,但无法找到修复方法。任何帮助表示赞赏。
答案
我想你想要更像这样的东西:
Dim pvItem As PivotItem
'make all values in the filter true to start with
With ActiveSheet.PivotTables("PivotTable4").PivotFields("Date")
For Each pvItem In .PivotItems
pvItem.Visible = True
Next pvItem
End With
With ActiveSheet.PivotTables("PivotTable4").PivotFields("Date")
For Each pvItem In .PivotItems
If Format(pvItem.Name, "dd/mm/yyyy") <> Sheets("PIVOT").Range("B34") And Format(pvItem.Name, "dd/mm/yyyy") <> Sheets("PIVOT").Range("B35") Then
pvItem.Visible = False
End If
Next pvItem
End With
日期格式需要根据您的需要进行更改 - 但实际上,您需要在开始之前在过滤器中勾选所有项目。然后解开所有你想要的东西
此代码在您的文件上运行 - 一旦您重新启动PIVOT TABLE(更改工作表名称和数据透视表名称......)
Sub Pivot_Test()
Dim pvItem As PivotItem
'make all values in the filter true to start with
ActiveSheet.PivotTables("PivotTable2").RefreshTable
With ActiveSheet.PivotTables("PivotTable2").PivotFields("ipg:date")
For Each pvItem In .PivotItems
pvItem.Visible = True
Next pvItem
End With
Dim dte1 As Date
Dim dte2 As Date
dte1 = CDate(Sheets("Sheet2").Range("B34"))
dte2 = CDate(Sheets("Sheet2").Range("B35"))
With ActiveSheet.PivotTables("PivotTable2").PivotFields("ipg:date")
For Each pvItem In .PivotItems
If Format(pvItem.Name, "mm/dd/yyyy") <> dte1 And Format(pvItem.Name, "mm/dd/yyyy") <> dte2 Then
pvItem.Visible = False
End If
Next pvItem
End With
End Sub
以上是关于VBA:根据单元格值过滤数据透视表的主要内容,如果未能解决你的问题,请参考以下文章