使用vba代码过滤掉数据透视表中的零

时间:2017-10-23 15:38:22

标签: vba excel-vba excel

我有vba代码可以帮助我创建数据透视表,但是现在我遇到了具有0值的条目,在数据透视表上显示为空白但是我想修改我的代码以便我可以过滤掉0值。换句话说,我想使pivotitem不显示右侧的值是否为0。

请看欲望结果的图片。当我运行我的代码时,没有错误,似乎什么也没发生。

'filter out zero
    Dim ws1 As Worksheet
    Set ws1 = Worksheets("PivotTable")

    Dim pf2 As PivotField
    Set pf2 = Pvt.PivotFields("Price Range")

    Dim pi2 As PivotItem
    For Each pi2 In pf2.PivotItems
        pi2.Visible = Len(ws1.Range(pi2.DataRange.Address)) > 0
    Next

End Sub

enter image description here

2 个答案:

答案 0 :(得分:1)

上面的代码有很多问题,主要是未分配的变量。如果您在模块的顶部使用Option Explicit,那么它将极大地帮助您学习正确的代码语法。

这对你有用:

Option Explicit 

Sub FilterBlankPivotItems()

    Dim ws1 as Worksheet
    Set ws1 = Worksheets("PivotTable")

    Dim pt as PivotTable
    Set pt = ws1.PivotTable("PivotTable1")

    Dim pf as PivotField
    Set pf = pt.PivotFields("PriceRange")

    Dim pi as PivotItem
    For each pi in pf.PivotItems
        pi.Visible = Len(ws1.Range(pi.DataRange.Address)) > 0
    Next

End Sub

答案 1 :(得分:1)

没有必要遍历PivotItems。相反,您只需在“价格范围”字段上设置“值”过滤器,即可仅显示具有大于零的对应值的项目。

Option Explicit

Sub FilterBlankPivotItems()

Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pfValues As PivotField

Set ws = Worksheets("SomeWorksheetName")
Set pt = ws.PivotTables("SomePivotTableName")
Set pf = pt.PivotFields("SomePivotFieldName")
Set pfValues = pt.PivotFields("SomeValuesFieldName")

pf.ClearAllFilters
pf.PivotFilters.Add2 Type:=xlValueIsGreaterThan, DataField:=pfValues, Value1:=0

End Sub

这与执行此操作相同:

enter image description here

enter image description here

enter image description here

enter image description here