作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试删除单元格值不等于数组 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/
我是一名优秀的程序员,十分优秀!