【问题标题】:How to filter multiple data using keywords in VBA?如何在 VBA 中使用关键字过滤多个数据?
【发布时间】:2017-12-07 08:30:15
【问题描述】:

我想用这 3 个关键词过滤掉不必要的数据:Proton、Hyundai、Perodua。但运行此代码后,我收到“未找到命名参数”错误。

''Filtering return reason for Sheet1
Rows("1:1").Select
Selection.AutoFilter

Dim rng As Range

Set rng = ActiveSheet.Range("A1:L2671")
FilterField = WorksheetFunction.Match("Car", rng.Rows(1), 0)

'Turn on filter if not already turned on
If ActiveSheet.AutoFilterMode = False Then rng.AutoFilter

'Filter Specific Countries
rng.AutoFilter Field:=FilterField, Criteria1:="=*Proton*" _
    , Operator:=xlOr, Criteria2:="=*Hyundai*" _
    , Operator:=xlOr, Criteria3:="=*Perodua*"

在我运行此代码后,Criteria3 被突出显示。为什么我不能在过滤器字段中插入 3 个条件?

这是我的数据示例:

【问题讨论】:

标签: vba excel filter criteria


【解决方案1】:

我不确定自动过滤器是否可以采用MSDN article 中给出的超过 2 个标准

但是,您可能想尝试按照另一个解决方案 here 中的建议将数组传递到条件 1 中

就我个人而言,在使用自动过滤器之前,我更喜欢使用带有函数(例如 if 语句)的辅助列来缩小我的选择范围。

【讨论】:

  • 但是如果我使用数组,我需要写下这 3 个汽车品牌的所有类型的汽车。有没有更好的建议?
  • @Icc 是的,这就是这个解决方案的问题。由于我不确定您的确切条件,在这一点上,我会想到创建一个辅助列 =if(find("Hyundai",A1)>0, 1 , 0) 并过滤辅助列以获得您想要的结果。如果这有帮助,请告诉我。
  • 这确实很有帮助,但很耗时。无论如何,我很感激你的帮助。 :)
  • @Icc 实际上,您可能只需要编写一次公式并将其拖下,因为发现现代基本上与您原来的“现代”相似 - 这意味着它应该捕获现代的不同型号,您实际上不必在公式中包含每个型号
  • 是的,听起来可行..请注意,vba 速度部分取决于代码“命中”工作表的次数,如果您要处理您的选项中的选项,使用自动过滤器可能会更慢代码。但是,如果您不关心速度,请忽略上述内容。恭喜您的解决方案!
【解决方案2】:

由于使用通配符而出现此问题。在这些情况下,您不能同时使用超过 2 个过滤器值。

这不起作用:

rng.AutoFilter Field:=FilterField, _
    Criteria1:=Array("*Hyundai*","*Proton*","*Perodua*"), _
    Operator:=xlFilterValues

但是,您可以使用模式匹配,首先将您的范围过滤到一个数组中,然后动态创建要过滤的数组的值。

好的示例代码在this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 2019-09-29
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多