2

我正在尝试删除所有单元格值不等于数组 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
4

1 回答 1

3

导致无限循环的行是这一行:

i = i - 1

摆脱它,并替换它

For i = 1 To LastRow

有了这个

For i = LastRow To 1 Step -1

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

如果您在调试模式下单步执行您的代码,您本可以自己弄清楚这一点。

相反,只需使用Step -1.

于 2014-04-25T07:33:40.800 回答