在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