要查找值并删除前两个记录

时间:2014-07-03 05:37:14

标签: excel vba excel-vba

我想找到价值"没有结果"并删除它上面的行和两行。

Name 1(A1)      
  (A2 is empty)     App(B2)     Efforts (C2)

No Results(A3)
Name 3 (A4)
Valid  (A5)
Name 2(A6)
(A7 is empty)
No Results(A8)

我可以删除记录的值,但不是上面的记录。尝试Cells(i-2, "A").EntireRow.Delete但删除了它上面的所有记录。能帮忙吗?

Sub Macro1()
    Last = Cells(Rows.Count, "A").End(xlUp).Row
    For i = Last To 1 Step -1
      If (Cells(i, "A").Value) = "No Results" Then
        Cells(i, "A").EntireRow.Delete
      End If
    Next i
End Sub

1 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题:

Public Sub Macro1()
    Dim i As Long

    For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
        If Cells(i, "A").Value = "No Result" Then
            Range((i-2) & ":" & i).Delete
        End If
    Next i
End Sub

仅当您要“过滤”的工作表是当前活动的工作表时才有效,如果打算从模块运行,最好明确指定工作表,例如Sheets("Sheet1").Cells(i, "A")

我对您自己的尝试所做的唯一真正的改变是在您的If语句中使用Range而不是Cells。使用Range函数,我们可以使用字符串引用Excel范围,例如Range("A1")。在这种情况下,我们特别构造一个引用行(i-2)到i的字符串,因此对于i = 9我们正在执行Range("7:9").Delete