我试图删除单元格值不等于数组Ar()中的一个值的所有行。当我把逻辑运算符NOT循环因某种原因变得无限时(excel冻结)。相反,它可以完美地工作,以防我想删除包含数组值的行。
问题在线:
If Not .Cells(i, 10).Value = Ar(j) Then
我的代码:
Sub Tims()
Dim LastRow As Long, LR As Long
Dim i As Long, j As Long
Dim t As Integer
Dim Ar() As String
Worksheets("Start").Activate
t = Count("a", Range("A3:A14"))
LR = Range("I3:I10").End(xlDown).Row
Worksheets("Master").Activate
Sheets("Master").Range("A100:A" & 100 + LR - 3).Value = Sheets("start").Range("I3:I" & LR).Value
With Worksheets("Master")
For j = 1 To LR - 2
ReDim Preserve Ar(j)
Ar(j) = Cells(99 + j, 1)
Next j
End With
With Worksheets("Master")
LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
End With
Worksheets("Master").Activate
For j = 1 To LR - 2
For i = 1 To LastRow
With Worksheets("Master")
If Not .Cells(i, 10).Value = Ar(j) Then
.Cells(i, 10).EntireRow.Delete
i = i - 1
End If
End With
Next i
Next j
End Sub
答案 0 :(得分:3)
引起无限循环的线是这一行:
i = i - 1
摆脱它,并替换此
For i = 1 To LastRow
用这个
For i = LastRow To 1 Step -1
我明白为什么你尝试i = i - 1
以避免每次删除行时都跳过一行。但这并不起作用:如果一行被删除,那么它会被表底部的空行替换,最终会到达它。这个空行显然不包含数组Ar(j)
中的任何值,因此它会被删除并被另一个空行替换,然后将其删除并替换为另一个空行,无限制。
如果你在调试模式中逐步完成代码,你可以自己弄清楚这一点。
相反,只需使用Step -1
自下而上进行迭代。