如果找到字符串,则删除行vba excel

时间:2015-08-12 14:28:00

标签: excel vba excel-vba

如果excel文件不包含某个单词,我试图删除行。

我遍历B列中的单元格并检查单元格值是否包含此字符串,如果没有,则将其删除。

但是,我收到错误消息范围类的删除方法失败

Sub macro()

Dim i As Integer, intValueToFind As Integer
Dim ws As Worksheet

Set ws = Worksheets("RAW DATA (2)")

For i = 1 To 500    ' Revise the 500 to include all of your values

    If InStr(Cells(i, 2).Value, "Error") = False Or InStr(Cells(i, 2).Value, "No credentials") = False Or InStr(Cells(i, 2).Value, "Connection Failed") = False Then
        ws.Rows(i).EntireRow.Delete
    End If

Next i

End Sub

3 个答案:

答案 0 :(得分:0)

你正在混合你的方法。

'。EntireRow'是Range的属性,而不是Row。

所以你在哪里:

ws.rows(i).EntireRow.Delete

您应该输入类似的内容:

ws.Range("B"&i).EntireRow.Delete

但实际上,你可以用一个.Row方法来简化它,这只是删除。所以,你也可以说:

ws.rows(i).Delete

我已经测试了两者并确认语法是正确的;我看不到您的代码有任何其他问题。

答案 1 :(得分:0)

将所有字符串比较修改为更接近

    If NOT InStr(1, " error no credentials connection failed ", lcase(Cells(i, 2).Value), vbTextCompare) Then

答案 2 :(得分:0)

自动过滤比循环更有效

Sub DeleteRows()
    Sheet1.Range("a1:c35").AutoFilter Field:=2, Criteria1:="<>error"
    Sheet1.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Sheet1.UsedRange.AutoFilter
'repeat for each value
End Sub