gpt4 book ai didi

vba - 高级筛选条件可以在 VBA 中而不是范围中吗?

转载 作者:行者123 更新时间:2023-12-02 10:27:19 25 4
gpt4 key购买 nike

在尝试通过 VBA 以正常的自动筛选方式徒劳地设置 2 个以上标准后,我开始了解到它必须通过高级筛选器来完成。

违规示例:

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

我希望将条件从 PowerShell 脚本传递给函数(而不是宏)。我一切正常,符合 1 个标准的预期,但现在我想要 3 个。

我想我可以编写一个宏来插入新工作表,写入条件,然后过滤该新范围,但我宁愿先检查首选方式。

最佳答案

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

考虑以下示例数据。

       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 statement非常理想,因为它支持 Like 关键字来构建您的匹配集合。通过将值转储到常规变体数组中,甚至可以快速循环遍历大行数据。

关于vba - 高级筛选条件可以在 VBA 中而不是范围中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34532282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com