高级过滤标准可以在VBA而不是范围?

在尝试通过VBA设置超过2个标准的正常自动过滤方式之后,我发现它必须通过高级filter来完成。

违规的例子:

Worksheets(1).Range("A1").AutoFilter Field:=ColNum, Criteria1:="A*", Operator:=xlOr, Criteria2:="B*", Operator:=xlOr, Criteria3:="C*" 

我希望将标准传递给PowerShell脚本中的函数(而不是macros)。 我有这一切工作正常,如预期的1标准,但现在我想3。

我想我可以写一个macros插入一个新的表格,写入条件,然后筛选新的范围,但我宁愿首先检查首选的方式。

要筛选多个通配符,请创build通配符匹配的变体数组,然后使用标准AutoFilter方法使用完整值数组。 您可以通过将字典对象与其唯一索引属性一起使用来最小化数组。

考虑下面的示例数据。

autofilter_multi_wilcard

运行这个代码。

 Sub multiWildcards() Dim v As Long, vVALs As Variant, dVALs As Object Dim colNum As Long Set dVALs = CreateObject("Scripting.Dictionary") dVALs.comparemode = vbTextCompare colNum = 2 'column B With Worksheets(1) If .AutoFilterMode Then .AutoFilterMode = False With .Cells(1, 1).CurrentRegion vVALs = .Columns(colNum).Cells.Value2 For v = LBound(vVALs, 1) To UBound(vVALs, 1) If Not dVALs.exists(vVALs(v, 1)) Then Select Case UCase(Left(vVALs(v, 1), 1)) Case "A", "B", "C" dVALs.Add Key:=vVALs(v, 1), Item:=vVALs(v, 1) Case Else 'do nothing End Select End If Next v If CBool(dVALs.Count) Then 'populated the dictionary; now use the keys .AutoFilter Field:=colNum, Criteria1:=dVALs.keys, Operator:=xlFilterValues Else Debug.Print "Nothing to filter on; dictionary is empty" End If '.CurrentRegion is now filtered on A*, B*, C* in column B 'do something with it End With End With dVALs.RemoveAll: Set dVALs = Nothing End Sub 

结果应该是:

autofilter_multi_wilcard_results

这些结果可以与许多其他通配符场景重复使用。 Select Case语句是理想的,因为它支持Like关键字来构build您的匹配集合。 通过将值转储到常规variables数组中,可以快速完成大量数据循环。