根据列中的值删除行对

时间:2015-12-28 14:17:31

标签: vba excel-vba excel-2010 excel

测试机器以两种不同的速度测试零件:50和200 rpm。机器以每个速度输出每个部件的数据,以便

第1行=第1部分,转速为50 rpm 第2行=第2部分,转速为200 rpm 第3行=第2部分,转速为50 rpm 第4行=第2部分,转速为200 rpm

等约23,000个零件。

如果某个部件编号因特定速度而失败,则数据会显示" n.i.O。"在该行的H列中,但它只显示该速度。我试图写一个宏来检查一行是否包含" n.i.O。" value,然后删除该行,并删除其他速度的行。这是我到目前为止的代码:

Sub DeleteFailures()

Dim r As Long

Dim lastrow As Long

lastrow = Cells(Rows.Count, "A").End(xlUp).Row

For r = 1 To lastrow

    If Cells(r, "H").Value = "n.i.O." Then

        If Cells(r, "E").Value = "50" Then

            Rows(r + 1).EntireRow.Delete

            Rows(r).EntireRow.Delete

        ElseIf Cells(r, "E").Value = "200" Then

            Rows(r - 1).EntireRow.Delete

            Rows(r).EntireRow.Delete

        End If

    Else

    End If

Next

End Sub

这似乎并不想为我工作。我认为问题可能是每次删除时都会跳过一行,但我不确定。还有另一种方法可能更好吗?

1 个答案:

答案 0 :(得分:0)

这正是你思考的原因。为了使它工作,你应该从底部循环:

For r = lastrow To 1 Step -1

我认为整个For循环块应该如下所示(已更改ElseIf部分):

For r = lastrow To 1 Step -1
    If Cells(r, "H").Value = "n.i.O." Then
        If Cells(r, "E").Value = "50" Then
            Rows(r + 1).EntireRow.Delete
            Rows(r).EntireRow.Delete
        ElseIf Cells(r, "E").Value = "200" Then
            Rows(r).EntireRow.Delete
            Rows(r - 1).EntireRow.Delete
            r = r - 1
        End If
    Else
    End If
Next