Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VBA中使用关键字过滤多个数据?_Vba_Excel_Filter_Criteria - Fatal编程技术网

如何在VBA中使用关键字过滤多个数据?

如何在VBA中使用关键字过滤多个数据?,vba,excel,filter,criteria,Vba,Excel,Filter,Criteria,我想用这3个关键词过滤掉不必要的数据:质子、现代、佩罗杜阿。但在运行此代码后,我得到了“未找到命名参数”错误 ''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

我想用这3个关键词过滤掉不必要的数据:质子、现代、佩罗杜阿。但在运行此代码后,我得到了“未找到命名参数”错误

''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个条件插入过滤器字段

以下是我的数据示例:


我不确定autofilter是否可以采用中给出的两个以上标准

但是,您可能希望尝试将数组传递到另一个解决方案中建议的criteria1中


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

我不确定autofilter是否可以采用中给出的两个以上标准

但是,您可能希望尝试将数组传递到另一个解决方案中建议的criteria1中


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

问题是因为使用了通配符。在这些情况下,不能同时使用两个以上的过滤器值

这不起作用:

rng.AutoFilter Field:=FilterField, _
    Criteria1:=Array("*Hyundai*","*Proton*","*Perodua*"), _
    Operator:=xlFilterValues
但是,您可以使用模式匹配,首先在数组中获取要过滤的范围,然后动态创建要过滤的值


好的示例代码在

中。问题是由于使用了通配符。在这些情况下,不能同时使用两个以上的过滤器值

这不起作用:

rng.AutoFilter Field:=FilterField, _
    Criteria1:=Array("*Hyundai*","*Proton*","*Perodua*"), _
    Operator:=xlFilterValues
但是,您可以使用模式匹配,首先在数组中获取要过滤的范围,然后动态创建要过滤的值


好的示例代码位于使用数组的@RobinMackenzie链接的可能副本中。如何使用数组和关键字进行搜索?可能重复的@RobinMackenzie可能重复的使用数组的此链接。我如何使用数组和关键字进行搜索?可能重复,但如果我使用数组,我需要写下这3个汽车品牌的所有车型。还有更好的建议吗?@Icc是的,这就是这个解决方案的问题。由于我不确定您的确切情况,在这一点上,我会考虑创建一个helper列
=if(find(“Hyundai”,A1)>0,1,0)
并过滤helper列以获得您想要的结果。如果有帮助,一定要告诉我。这确实很有帮助,但很费时。无论如何,我感谢你的好意帮助@实际上,你可能只需要写一次公式,然后把它拖下来,因为找到现代汽车基本上与你原来的“现代”相似,这意味着它应该能捕捉到现代汽车的不同车型,实际上,你不必在公式中包含所有模型听起来是可行的。只需注意,vba速度部分取决于代码“点击”工作表的次数,如果你要处理代码中的选项,使用自动筛选可能会更慢。但是,如果你不关心速度,请忽略以上内容。祝贺你的解决方案!但是如果我使用数组,我需要写下这3个汽车品牌的所有车型。还有更好的建议吗?@Icc是的,这就是这个解决方案的问题。由于我不确定您的确切情况,在这一点上,我会考虑创建一个helper列
=if(find(“Hyundai”,A1)>0,1,0)
并过滤helper列以获得您想要的结果。如果有帮助,一定要告诉我。这确实很有帮助,但很费时。无论如何,我感谢你的好意帮助@实际上,你可能只需要写一次公式,然后把它拖下来,因为找到现代汽车基本上与你原来的“现代”相似,这意味着它应该能捕捉到现代汽车的不同车型,实际上,你不必在公式中包含所有模型听起来是可行的。只需注意,vba速度部分取决于代码“点击”工作表的次数,如果你要处理代码中的选项,使用自动筛选可能会更慢。但是,如果你不关心速度,请忽略以上内容。祝贺你的解决方案!