它通常是快得多使用自动筛选而不是环路范围
下面的代码创建一个工作柱,然后使用公式来检测删除条件,然后自动筛选并删除结果记录
工作列将公式
=OR(L1="ABC",AA1<>"DEF")
放入第一个空白列的第1行,然后复制到真正使用的范围。然后用AutoFilter快速删除任何TRUE记录
Sub QuickKill()
Dim rng1 As Range, rng2 As Range, rng3 As Range
Set rng1 = Cells.Find("*", , xlValues, , xlByColumns, xlPrevious)
Set rng2 = Cells.Find("*", , xlValues, , xlByRows, xlPrevious)
Set rng3 = Range(Cells(rng2.Row, rng1.Column), Cells(1, rng1.Column))
Application.ScreenUpdating = False
Rows(1).Insert
With rng3.Offset(-1, 1).Resize(rng3.Rows.Count + 1, 1)
.FormulaR1C1 = "=OR(RC12=""ABC"",RC27<>""DEF"")"
.AutoFilter Field:=1, Criteria1:="TRUE"
.EntireRow.Delete
On Error Resume Next
'in case all rows have been deleted
.EntireColumn.Delete
On Error GoTo 0
End With
Application.ScreenUpdating = True
End Sub
+1方向,但DEF在哪里? – Fionnuala
@Remou:编辑。谢谢 ! –
是的,但AA <>“DEF”。 :) – Fionnuala