如果特定工作表中的单元格等于特定值,则删除该行

时间:2015-10-26 12:39:02

标签: excel vba excel-vba

我正在检查范围内的所有单元格。如果单元格的值等于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

现在模块运行没有任何错误。它只是没有做任何事情。没有任何行以任何方式被删除或受到影响。

2 个答案:

答案 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