【问题标题】:Excel VBA: Autofilter with multiple criteria, only filtering by last entry in arrayExcel VBA:具有多个条件的自动过滤器,仅按数组中的最后一个条目过滤
【发布时间】:2023-03-18 16:32:01
【问题描述】:

我正在尝试根据数字进行自动过滤。我可以通过转换为字符串来搜索匹配的列,但过滤会变得更棘手。

我已经设置了代码,所以如果要过滤的列是数字,它会循环遍历它们并将包含“xxx”的任何内容添加到数组中(每个列的第一个实例)。然后我使用这个数组作为我的自动过滤器的标准。

问题来自自动过滤器命令。如果我只使用数组作为条件,它只会按数组中的最后一项过滤。如果我将 xlFilterValues 添加为运算符,则不会得到任何结果。

如何正确地将数组(变量)用作标准?我也尝试过高级过滤器,但遇到了运行时错误。

谢谢

相关代码:

If isInCol Then ' filter the table by the selected col; Use Range Sort
    With ActiveSheet
        If sortField = 10 Or sortField = 21 Then ' sort by a searched array
            ' sort through values, add matching to array
            For Each foo In filterColumn
                If InStr(CStr(foo.Value), filterText) Then
                    If arrayCounter = 0 Then
                        sortKeyNum(arrayCounter) = CDbl(foo.Value)
                        arrayCounter = arrayCounter + 1
                    ElseIf foo.Value <> sortKeyNum(arrayCounter - 1) Then
                        sortKeyNum(arrayCounter) = CDbl(foo.Value)
                        arrayCounter = arrayCounter + 1
                    End If
                End If
            Next foo
            ReDim Preserve sortKeyNum(arrayCounter - 1)
            currentData.AutoFilter Field:=sortField, Criteria1:=sortKeyNum, Operator:=xlFilterValues ' , VisibleDropDown:=False
            ' NOTE: ^^^^THIS IS WHERE MY CODE IS FAILING^^^^
        Else
            currentData.AutoFilter Field:=sortField, Criteria1:=sortKey ' , VisibleDropDown:=False
        End If
        currentData.Sort key1:=filterColumn, Order1:=sortOrder, Header:=xlYes
    End With
End If

【问题讨论】:

    标签: excel autofilter vba


    【解决方案1】:

    所以我找到了this

    显然,当使用数组自动过滤列时,即使您正在过滤数字,它也必须是字符串格式。我将 sortKeyNum 更改为字符串数组,它按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 2021-01-26
      • 2021-10-20
      • 2021-07-01
      • 2019-03-02
      相关资源
      最近更新 更多