我正在检查范围内的所有单元格。如果单元格的值等于0(该值由公式生成),则删除该行。
Sub CleanJunk()
For Each c In Worksheets("testsheet").Range("B33:B533").Cells
If c.Value = "0" Then Rows(c.Row).EntireRow.Delete
Next
End Sub
现在模块运行没有任何错误。它只是没有做任何事情。没有任何行以任何方式被删除或受到影响。
答案 0 :(得分:5)
您尚未对Rows
来电进行限定,您需要向后循环:
Sub CleanJunk()
Dim n as long
for n = 533 to 33 step -1
If Worksheets("testsheet").Cells(n, "B").Value2 = 0 Then Worksheets("testsheet").Rows(n).EntireRow.Delete
Next
End Sub
答案 1 :(得分:0)
这里的关键是该值是由公式生成的。它可能包含浮点错误。
将值与字符串"0"
进行比较也不是很好的编码 - 苹果与苹果不是橙子!
要摆脱浮点错误,请使用带有#of decimals = R的(ROUND(Num,小数位数)
将结果与0进行比较。
Option Explicit 'so you don't confuse your variables
Sub CleanJunk()
Dim c as range
For Each c In Worksheets("testsheet").Range("B33:B533").Cells
'compare values rounded to integer with 0
If Round(c.Value, 0) = 0 Then c.EntireRow.Delete
Next c 'it pays to be explicit
End Sub