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更改为字符串数组,并且按预期方式工作。