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

Arrays 通过引用单元格字符串值筛选数据透视表项,arrays,excel,vba,filter,pivot-table,Arrays,Excel,Vba,Filter,Pivot Table,我试图使用存储在数组变量LTmonth()中的多个单元格中的字符串值筛选透视表。但是,当我将这个数组变量插入下面的代码时,由于某种原因,它不会读取数组值,也不会过滤存储在该数组中的值 我注意到的一点是,当我将LTmonth更改为过滤器的实际值(如下图所示)时,代码可以完美地工作: “如果ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“月”).PivotItems(j)=“2016年1月”,则” 假设单元格值与透视表中的过滤器项完全匹配,如何使这两个值

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

我注意到的一点是,当我将LTmonth更改为过滤器的实际值(如下图所示)时,代码可以完美地工作:

“如果ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“月”).PivotItems(j)=“2016年1月”,则”

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

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

看看这是否符合你的目标

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

看看这是否符合你的目标

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

使用
F8
调试代码以查看数组中的内容。要比较两个字符串,请使用
InStr
。如何比较筛选项的字符串值?我认为这可能是因为过滤器中日期的格式可能与项目的实际格式不同。使用
F8
调试代码以查看数组中的内容。要比较两个字符串,请使用
InStr
。如何比较筛选项的字符串值?我认为可能是这样的,因为过滤器中日期的格式可能与项目的实际格式不同。感谢您的快速回复。但是,筛选项采用大写格式(例如,2016年1月),因此我不确定您添加的格式语句是否有效。引用的单元格已使用“=上限(文本(A4,“MMM-YYYY”)更正此大小写“。此外,我无法使用ClearAllFilters语句,因为下面还有另一个透视表,因此无法检查所有筛选器,因为它们将重叠。我试图通过让它逐个检查和取消检查单元格中引用的筛选器值来避免此问题。因此,我刚刚发现我的同事在pivot表(而不是原始数据)中筛选了原始pivot筛选器后,正在将其原始pivot筛选器名称更改为“MMM-YYYY”格式。因此,最初,过滤项是以2015年1月1日的格式编写的,但他会将过滤项重命名为2015年1月。过滤项将改为“2015年1月”,而不是“2015年1月1日”。如果有,这会如何改变情况?在这种情况下,请尝试LTMonth(i)=UCase(格式(ActiveSheet.Range(“P2”).Offset(i-1,0).Value,“mmm-yyyy”))并查看这是否适用于您。感谢您提供的代码,但它不起作用。我在代码中看到,当数据透视项被重命名时,它会生成以下代码:[ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“月”).PivotItems(u“3/1/2015”).Caption=“MAR-2015”]。我看到使用了函数“.Caption”。不确定这是否有帮助…请尝试使用ActiveSheet.PivotTables(“PivotTable1”).PivotFields(“月”).PivotItems(j)。Caption=LTMonth(z),然后感谢您的快速回复。但是,筛选项采用大写格式(例如,2016年1月),因此我不确定您添加的格式语句是否有效。引用的单元格已使用“=上限(文本(A4,“MMM-YYYY”)更正此大小写“。此外,我无法使用ClearAllFilters语句,因为下面还有另一个透视表,因此无法检查所有筛选器,因为它们将重叠。我试图通过让它逐个检查和取消检查单元格中引用的筛选器值来避免此问题。因此,我刚刚发现我的同事在pivot表(而不是原始数据)中筛选了原始pivot筛选器后,正在将其原始pivot筛选器名称更改为“MMM-YYYY”格式。因此,最初,过滤项是以2015年1月1日的格式编写的,但他会将过滤项重命名为2015年1月。过滤项将改为“2015年1月”,而不是“2015年1月1日”。如果有,这会如何改变情况?在这种情况下,请尝试LTMonth(i)=UCase(格式(ActiveSheet.Range(“P2”).Offset(i-1,0).Value,“mmm-yyyy”))并查看这是否适用于您。感谢您提供的代码,但它不起作用。我在代码中看到,当数据透视项被重命名时,它会生成以下代码:[ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“月”).PivotItems(u“3/1/2015”).Caption=“MAR-2015”]。我看到使用了函数“.Caption”。不确定这是否有帮助…然后尝试使用ActiveSheet.PivotTables(“PivotTable1”).PivotFields(“月”).PivotItems(j)。Caption=LTMonth(z),然后