在Excel中删除没有特定文本的整行

我试图删除A列ID字段中没有“AB”或“ON”的整行。我已经写下了下面的代码,但是它删除了所有的行。 任何人都可以帮助我这个请。 我附上了数据的截图,谢谢! 数据截图链接 :

Sub DeleteRows() FinalRow = Cells(Rows.Count, "A").End(xlUp).Row i = 2 Do While i <= FinalRow If Cells(i, "A") <> "PQ*" OR If Cells(i, "A") <> "ON*" Then Cells(i, 1).EntireRow.Delete FinalRow = FinalRow - 1 Else i = i + 1 End If Loop End Sub 

根据我的评论:

 Sub DeleteRows() FinalRow = Cells(Rows.Count, "A").End(xlUp).Row i = 2 Do While i <= FinalRow If Left(Cells(i, "A"), 2) = "PQ" Or Left(Cells(i, "A"), 2) = "ON" Then i = i + 1 Else Cells(i, 1).EntireRow.Delete FinalRow = FinalRow - 1 End If Loop End Sub 
  • 删除行时,最好从下往上
  • 通配符不能与等号运算符一起使用; 你应该使用Like运算符。
  • 你的逻辑是一点点的。 你需要把OR放在括号里

如果您使用的是原始文章中的通配符,则会转换为 PQ或ON 开头的单元格

所以:

 Option Explicit Sub DeleteRows() Dim FinalRow As Long Dim I As Long FinalRow = Cells(Rows.Count, "A").End(xlUp).Row For I = FinalRow To 2 Step -1 If Not (Cells(I, "A") Like "PQ*" Or _ Cells(I, "A") Like "AB*") Then _ Cells(I, 1).EntireRow.Delete Next I End Sub 

这是一个更类似于你正在做的选项。

编辑:如果身份证是前两个字母,应该工作。

 Sub Deleterows() FinalRow = Cells(Rows.count, "A").End(xlUp).row i = 2 Do While i <= FinalRow If Not Left(Cells(i, "A"), 2) = "PQ" And Not Left(Cells(i, "A"), 2) = "ON" Then Cells(i, 1).EntireRow.Delete FinalRow = FinalRow - 1 Else i = i + 1 End If Loop End Sub