Excel VBA:具有多个条件的自动过滤器,仅按数组中的最后一项过滤

Excel VBA: Autofilter with multiple criteria, only filtering by last entry in array

我正在尝试根据数字进行自动过滤。我可以通过转换为字符串来搜索匹配项,但是过滤起来会比较棘手。

我已经设置了代码,因此,如果要过滤的列是数字,它将遍历它们并将包含" xxx"的任何数字添加到数组(每个数字的第一个实例)中。然后,我将此数组用作自动过滤器的条件。

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

如何适当地使数组(变量)作为条件工作?我也尝试了高级过滤器,但遇到运行时错误。

谢谢

相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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


所以我找到了。

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