【问题标题】:VBA Excel : filter with "or" condtion between 2 columnsVBA Excel:过滤两列之间的“或”条件
【发布时间】:2017-11-30 20:27:15
【问题描述】:

我的 10 列 (A-J) 表中有 2 列(A 和 D),具有 2 种值:“OK”或“NOT OK”。我想过滤以使所有行都至少包含一个“NOT OK”。我还希望它在运行宏后自动出现过滤器(标题为 row(1)),以便我以后可以使用它。但是,我的代码不起作用。

with wb1.Sheets(3)
    .Range("A1:J1").AutoFilter
    .Range("A1:J1").AutoFilter Field:=1, Criteria1:="NOT OK", _ Operator:=xlOr, Field:=4, Criteria1:="NOT OK"
End with

这可行吗?提前谢谢你。

【问题讨论】:

  • 您希望过滤器显示 NOT 行还是隐藏 NOT 行??
  • 请记住,AutoFilter 是一个切换开关,因此如果您连续使用两次,请先将其打开,然后立即将其关闭。
  • 第一个自动过滤器激活它,第二个是添加过滤器,我一直这样做。但是如果你在那之后添加一个空白的自动过滤器,它将删除所有内容。
  • @Gary'sStudent 我想要至少有一个“NOT OK”的行。

标签: vba excel filter excel-2007


【解决方案1】:

最好的方法是添加一个新列,其中包含一个检查所有要求的公式,然后您可以过滤该新列。

【讨论】:

  • 好的。如果我做一个while循环来检查每一行的两列,我怎么能在过滤器中隐藏我不想要的行(带有2“OK”的行)?
【解决方案2】:

高级过滤器可以设置复杂的标准。我们可以暂时使用 available 来放置过滤器范围然后清除它。

With wb.Worksheets("Sheet3")
  .Range("AA1:AB1").value = Array("ColA", "ColJ")
  .Range("AA2:AB2").value = Array("NOT OK", "")
  .Range("AA3:AB3").value = Array("", "NOT OK")

  .Columns("A:J").AdvancedFilter xlFilterInPlace, .Range("AA1:AB3")
  .Range("AA1:AB3").ClearContents ' clear it after dome with it
End With

同样的想法也可以应用于普通的Autofilter,暂时使用一些未使用的列来将过滤条件生成为布尔值。例如,使用列AA (=27)

With wb.Worksheets("Sheet3")
  .Range("AA2:AA1000").Formula = "=OR(A2=""NOT OK"", J2=""NOT OK"")"
  .Range("A1:AA1000").AutoFilter 27, True
  .Columns("AA").Delete xlToLeft
End With

【讨论】:

  • 谢谢。我必须在互联网上阅读更多内容才能理解所有内容,但这似乎是一个聪明的想法。
猜你喜欢
  • 2017-04-10
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2019-07-26
  • 2021-12-16
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多