excel - 无限For...下一个循环: how do I fix it?

标签 excel vba infinite-loop not-operator

我正在尝试删除单元格值不等于数组 Ar() 中的值之一的所有行。当我输入逻辑运算符 NOT 时,由于某种原因循环会无限循环(Excel 卡住)。相反,如果我想从数组中删除包含值的行,它可以完美地工作。

问题上线:

如果不是 .Cells(i, 10).Value = Ar(j) 则

我的代码:

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

最佳答案

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

i = i - 1

摆脱它,并替换它

For i = 1 To LastRow

有了这个

For i = LastRow To 1 Step -1

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

如果您在 Debug模式下单步执行代码,您可能会自己弄清楚这一点。

相反,只需使用Step -1从下往上迭代即可。

关于excel - 无限For...下一个循环: how do I fix it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23285954/

相关文章:

vba - 用户创建的 VBA 函数返回 #VALUE

ios - 为什么scrollView在swift中不会是不定式?

vba - Excel公式中的 '$'是什么意思?例如 : $B$4

Excel-VBA : Variable Names, 匈牙利符号和变量命名最佳实践

VBA确定地址之前的单元格?

c++ - 日历运行无限循环

java - 如何限制 while (iterator.hasNext()) 迭代?

R download.file,下载excel文件不起作用

Excel 公式 IF 单元格编号为 'lower' 比 X、 'in between' X 和 Y 或 'higher' Y 则等于 A、B、C

ms-access - Access VBA : Scripting. 字典 - 转储到表?