如何合并VBA筛选代码,实现筛选苹果且排除含橙子的行?
如何合并VBA筛选代码,同时显示含"Apples"的行并排除含"Oranges"的行
我来帮你解决这个问题~ 你遇到的问题主要有两个:一是两次单独调用AutoFilter会导致后一次覆盖前一次的筛选规则,二是排除"Oranges"的条件没用到通配符,没法匹配所有包含该字样的内容。
原代码的问题分析
- 分开写两行
AutoFilter时,Excel自动筛选默认每次调用都会重置之前的筛选规则(即便你加了Operator:=xlAnd,但用法逻辑不对),所以第二行的筛选没能和第一行叠加生效。 - 要排除所有包含"Oranges"的行,得用通配符
*包裹关键词,也就是"<>*Oranges*"——不然只会精确匹配等于"Oranges"的单元格,没法过滤掉所有带这个词的内容。
修正后的代码
我们可以用With语句统一操作工作表,先清除旧筛选状态,再依次设置两个字段的筛选条件,实现多条件叠加生效:
With ActiveSheet .AutoFilterMode = False ' 清除之前的筛选状态,避免冲突 ' 设置字段24的筛选条件:显示含"Apples"的行 .Range("B4", .Range("BT4").End(xlDown)).AutoFilter Field:=24, Criteria1:="Apples" ' 叠加设置字段20的筛选条件:排除所有含"Oranges"的行 .Range("B4", .Range("BT4").End(xlDown)).AutoFilter Field:=20, Criteria1:="<>*Oranges*" End With
代码细节说明
With ActiveSheet:避免重复写ActiveSheet,让代码更简洁易读。.Range("BT4").End(xlDown)前面的.不能少,不然可能会引用到非当前工作表的范围(如果有其他工作表激活的话)。"<>*Oranges*":*是通配符,代表任意长度的字符,这个条件会排除所有单元格内容里包含"Oranges"的行。
运行这段代码后,就只会显示字段24包含"Apples"且字段20不包含"Oranges"的行啦~
内容的提问来源于stack exchange,提问作者Gandalfrandalf
相关产品推荐
相关产品推荐

