Vba 如何防止在检查和删除上一行时跳过行检查?
这是为了在两列之间循环,并验证L列中的值是否低于另一张图纸中单元格中的特定(单个)值。它还检查M列中同一行的单元格中是否存在“#N/A”错误。如果这些错误为真,则删除整行。下面的代码似乎可以工作,但是,我必须多次运行For循环才能完全删除所有行。我的直觉是,当一行被删除时,它不会检查它正下方的那一行并继续前进。我怎样才能避免这种情况?感谢您的帮助Vba 如何防止在检查和删除上一行时跳过行检查?,vba,excel,if-statement,for-loop,Vba,Excel,If Statement,For Loop,这是为了在两列之间循环,并验证L列中的值是否低于另一张图纸中单元格中的特定(单个)值。它还检查M列中同一行的单元格中是否存在“#N/A”错误。如果这些错误为真,则删除整行。下面的代码似乎可以工作,但是,我必须多次运行For循环才能完全删除所有行。我的直觉是,当一行被删除时,它不会检查它正下方的那一行并继续前进。我怎样才能避免这种情况?感谢您的帮助 Sub removerows() Dim wsOut As Worksheet Dim wsPrev As Worksheet Dim r As L
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
Sub-remoterows()
以工作表的形式显示
将wsPrev设置为工作表
变暗,变长
最后一排一样长
Set wsOut=工作表(“输出”)
设置wsPrev=工作表(“上一个”)
Lastrow=wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row
对于r=2到最后一行
如果wsOut.Cells(r,“L”).值
运行反向循环
将r=2的更改为Lastrow
将r=Lastrow的更改为2步骤-1
我在手机上时没有测试它,但这应该可以解决您的问题。Sub-remoterows()
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 = Lastrow To 2 step -1
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
以工作表的形式显示
将wsPrev设置为工作表
变暗,变长
最后一排一样长
Set wsOut=工作表(“输出”)
设置wsPrev=工作表(“上一个”)
Lastrow=wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row
对于r=Lastrow到2步骤-1
如果wsOut.Cells(r,“L”).值
如果要删除,可以使循环向后。可以通过使用
AutoFilter()
选项显式
分包商()
将值设置为双精度
prevValue=工作表(“以前”)。范围(“L2”)
对于工作表(“输出”)”只需在删除行后添加r=r-1即可
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
***** r = r -1 'Done! it will recheck the same cell after
Else
wsOut.Cells(r, "L").Interior.ColorIndex = 20
End If
Next
End Sub
Sub-remoterows()
以工作表的形式显示
将wsPrev设置为工作表
变暗,变长
最后一排一样长
Set wsOut=工作表(“输出”)
设置wsPrev=工作表(“上一个”)
Lastrow=wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row
对于r=2到最后一行
如果wsOut.Cells(r,“L”).值
当您删除一行时,您正在将下一行“升级”到第r行位置(替换当前行),因此当您增加到下一个r时,它自然会跳过您刚刚增加的行。看起来底部也会有问题,因为即使删除了行,Lastrow(总行数)仍然保持不变。这就是问题所在。谢谢
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
***** r = r -1 'Done! it will recheck the same cell after
Else
wsOut.Cells(r, "L").Interior.ColorIndex = 20
End If
Next
End Sub