【发布时间】:2017-05-16 19:08:42
【问题描述】:
这旨在循环遍历两列并验证 L 列中的值是否低于另一个工作表中单元格中的特定(单个)值。它还会检查 M 列同一行的单元格中是否存在“#N/A”错误。如果这些为真,则删除整行。下面的代码似乎可以工作,但是,我必须多次运行 For 循环才能完全删除所有行。我的直觉是,当一行被删除时,它不会检查它正下方的那一行并继续前进。我怎样才能避免这种情况?任何帮助表示赞赏。
Sub removerows()
Dim wsOut As Worksheet
Dim wsPrev As Worksheet
Dim r As Long
Dim Lastrow As Long
Set wsOut = Worksheets("Output")
Set wsPrev = Worksheets("Previous")
Lastrow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row
For r = 2 To Lastrow
If wsOut.Cells(r, "L").Value < wsPrev.Cells(2, "L").Value And _
Application.WorksheetFunction.IsNA(wsOut.Cells(r, "M").Value) Then
wsOut.Cells(r, "L").EntireRow.Delete
Else
wsOut.Cells(r, "L").Interior.ColorIndex = 20
End If
Next
End Sub
【问题讨论】:
-
当你删除一行时,你正在将下一行“提升”到第 r 个位置(替换当前行),所以当你递增到下一个 r 时,它自然会跳过你的行刚刚撞了上去。看起来您在底部也会遇到问题,因为即使您删除了行,Lastrow(总行数)仍然保持不变。
标签: vba excel if-statement for-loop