VBA Excel:使用"或"进行过滤2列之间的条件

时间:2017-06-27 17:09:56

标签: vba excel-vba filter excel-2007 excel

我的10列(A-J)中有2列(A和D),有2种值:" OK"或者"不行"。我想过滤所有的行至少有一个" NOT OK"。我还希望它在运行宏之后自动出现过滤器(在标题为行(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

这可行吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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