在 VBA 中使用 AdvancedFilter 时有没有办法使用 "Not equal to"
Is there a way to use "Not equal to" when using AdvancedFilter in VBA
我的问题很简单,但我一直无法找到适用于任何地方的解决方案。
我想过滤掉一个范围内存在于另一个范围内的所有值 - 如下所示:
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 上有很多示例说明如何执行此操作,其中一个在此处:
只是为了好玩,为了尝试解决我们绝对决定使用高级过滤器来实现您想要的结果,有一些方法可以绕过它来获得所需的结果...
如果您在要过滤的数据右侧添加一个额外的列,则在其中添加一个 CountIF 函数,例如 COUNTIF(SheetB!$B:$B0,$C2)
(相应地设置范围,或者更好 - 使用命名范围)来确定该值是否在条件范围内。
然后您将一个单元格放在一旁,其中包含值 0,并使用您的高级过滤器过滤 countIF 列以匹配包含 0 的单元格范围。
然后这将过滤 countIF 为 0 的所有内容。
正如我所说,这纯粹是为了好玩,并不是特别实用 - 我个人会选择 autofilter
路线。
我的问题很简单,但我一直无法找到适用于任何地方的解决方案。
我想过滤掉一个范围内存在于另一个范围内的所有值 - 如下所示:
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 上有很多示例说明如何执行此操作,其中一个在此处:
只是为了好玩,为了尝试解决我们绝对决定使用高级过滤器来实现您想要的结果,有一些方法可以绕过它来获得所需的结果...
如果您在要过滤的数据右侧添加一个额外的列,则在其中添加一个 CountIF 函数,例如 COUNTIF(SheetB!$B:$B0,$C2)
(相应地设置范围,或者更好 - 使用命名范围)来确定该值是否在条件范围内。
然后您将一个单元格放在一旁,其中包含值 0,并使用您的高级过滤器过滤 countIF 列以匹配包含 0 的单元格范围。
然后这将过滤 countIF 为 0 的所有内容。
正如我所说,这纯粹是为了好玩,并不是特别实用 - 我个人会选择 autofilter
路线。