如何使用VBA基于更多标准删除Excel中的行?

时间:2015-05-16 11:47:51

标签: excel vba excel-vba row

当有2个或更多条件时,我需要删除一些包含特定数据的行。

我有这样的代码:

For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
    If Cells(i, "D") <> "xx" Or Cells(i, "D") <> "xxx" Then Cells(i, "A").EntireRow.Delete         
Next i

但最后,它会删除第1行以外的所有内容。

然而,当我只有一个条件时,代码工作正常:

  For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
  If Cells(i, "D") <> "xx" Then Cells(i, "A").EntireRow.Delete

这将删除行以外的所有内容,其中包含D列中的“xx”。

有什么不对,为什么当我把第二个条件和/或不按照我希望的方式工作时?

2 个答案:

答案 0 :(得分:0)

AND / OR 逻辑中存在一个小缺陷:

Sub qwerty()
   For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
       If Cells(i, "D") = "xx" Or Cells(i, "D") = "xxx" Then
       Else
          Cells(i, "A").EntireRow.Delete
       End If
   Next i
End Sub

答案 1 :(得分:0)

这里是您更新的代码,请尝试:

For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
    If Not (Lcase(Cells(i, "D")) = "xx" Or Lcase(Cells(i, "D")) = "xxx") Then Cells(i, "A").EntireRow.Delete         
Next i
已添加

Lcase以移除由于"XX" = "xx"将返回false而导致的区分大小写,但Lcase("XX") = "xx"将返回true