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:根据单元格值过滤数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 根据下拉选择过滤多个数据透视表

加快数据透视表过滤 VBA 代码

使用 VBA 过滤 Excel 数据透视表

VBA数据透视表:添加过滤器

过滤数据透视表的最后一项 (vba)

用于替换单元格值并保持格式化的VBA脚本