通过引用单元格字符串值过滤数据透视表项

时间:2017-04-03 15:34:15

标签: arrays excel vba filter pivot-table

我正在尝试使用来自多个单元格的字符串值来过滤数据透视表,这些单元格存储在数组变量LTmonth()中。但是,当我将此数组变量插入下面的代码时,它不会出于某种原因读取数组值,也不会过滤存储在该数组中的值。

我注意到一件事,当我将LTmonth更改为过滤器的实际值(如下所示)时,代码完美运行:

“如果ActiveSheet.PivotTables(”PivotTable1“)。PivotFields(”MONTH“)。PivotItems(j)= ”JAN-2016“那么”

鉴于单元格值与数据透视表中的过滤器项完全匹配,如何使这两个值相互匹配?我到处寻找答案,但我找到的答案并没有帮助解决我的问题。这是我最接近使代码工作的原因,但我不确定为什么变量数组不起作用。

Sub Filter()

    Dim i, j, z, monthcount As Integer
    monthcount = 8

    Dim LTmonth() As String
    ReDim LTmonth(monthcount)

    For i = 1 To monthcount
        LTmonth(i) = ActiveSheet.Range("P2").Offset(i - 1, 0).Value
    Next i


    For j = 1 To ActiveSheet.PivotTables("PivotTable1").PivotFields("MONTH").PivotItems.Count
        For z = 1 To monthcount
            If ActiveSheet.PivotTables("PivotTable1").PivotFields("MONTH").PivotItems(j) = LTmonth(z) Then
                ActiveSheet.PivotTables("PivotTable1").PivotFields("MONTH").PivotItems(j).Visible = True
            Else
                ActiveSheet.PivotTables("PivotTable1").PivotFields("MONTH").PivotItems(j).Visible = False
            End If
        Next z
    Next j


End Sub

1 个答案:

答案 0 :(得分:0)

看看你是否做到了想要实现的目标。

Sub Filter()
    Dim pt As PivotTable
    Dim pf As PivotField

    Dim i, j, z, monthcount As Integer
    monthcount = 8

    Dim LTMonth() As String
    ReDim LTMonth(monthcount)

    For i = 1 To monthcount
        LTMonth(i) = Format(ActiveSheet.Range("P2").Offset(i - 1, 0).Value, "mmm-yyyy")
    Next i

    Set pt = ActiveSheet.PivotTables("PivotTable1")
    Set pf = pt.PivotFields("Month")
    pf.ClearAllFilters
    For j = 1 To pf.PivotItems.Count
        For z = 1 To monthcount
            If ActiveSheet.PivotTables("PivotTable1").PivotFields("MONTH").PivotItems(j) = LTMonth(z) Then
                ActiveSheet.PivotTables("PivotTable1").PivotFields("MONTH").PivotItems(j).Visible = True
                Exit For
            End If
        Next z
    Next j
End Sub