在 VBA 中使用 AdvancedFilter 时有没有办法使用“不等于”

问题描述

我的问题很简单,但我一直无法找到适用于任何地方的解决方案。

我想过滤掉一个范围中存在于另一个范围中的所有值 - 像这样:

SheetA.Range("C1:C" & LastRowA).AdvancedFilter Action:=xlFilterInPlace,Criteriarange:=<> & SheetB.Range("B1:B" & LastRow),Unique:=False

但是,这“”似乎不起作用,因为我收到语法错误

提前致谢

解决方法

正如您所发现的,Advanced Filter 仅用于根据另一个范围中的值过滤一个范围 - 不适用于它们不存在的地方:https://docs.microsoft.com/en-us/office/vba/api/excel.range.advancedfilter

还有其他使用 VBA 的方法来实现这一点 - 例如,使用 autofilter 和设置过滤条件。有很多关于 SO 的例子展示了如何做到这一点,一个在这里:https://stackoverflow.com/a/13936244/7858451

只是为了好玩,为了尝试解决我们绝对决心使用高级过滤器来实现您想要的东西,有一些方法可以解决它以获得所需的结果......

如果您在要过滤的数据右侧添加一个额外的列,在那里添加一个 CountIF 函数,例如 COUNTIF(SheetB!$B$1:$B$100,$C2)(相应地设置范围,或者更好的是 - 使用命名范围)来确定是否值在条件范围内。

然后,您将一个单元格放在一旁,其中值为 0,并使用高级过滤器过滤 countIF 列,以匹配包含 0 的单元格范围。

这将过滤 countIF 为 0 的所有内容。

正如我所说,这纯粹是为了好玩,并不是特别实用 - 我个人会沿着 autofilter 路线走。