无限的......下一个循环:我该如何解决?

时间:2014-04-25 06:44:31

标签: excel vba infinite-loop not-operator

我试图删除单元格值不等于数组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

1 个答案:

答案 0 :(得分:3)

引起无限循环的线是这一行:

i = i - 1

摆脱它,并替换此

For i = 1 To LastRow

用这个

For i = LastRow To 1 Step -1

我明白为什么你尝试i = i - 1以避免每次删除行时都跳过一行。但这并不起作用:如果一行被删除,那么它会被表底部的空行替换,最终会到达它。这个空行显然不包含数组Ar(j)中的任何值,因此它会被删除并被另一个空行替换,然后将其删除并替换为另一个空行,无限制。

如果你在调试模式中逐步完成代码,你可以自己弄清楚这一点。

相反,只需使用Step -1自下而上进行迭代。