【问题标题】:delete row if string found vba excel如果找到字符串,则删除行 vba excel
【发布时间】:2015-08-12 14:27:59
【问题描述】:

如果 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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    你的方法有点混搭。

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

    那么你在哪里:

    ws.rows(i).EntireRow.Delete
    

    你应该这样写:

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

    但实际上,您可以使用 .Row 方法之一简化此操作,即 Delete。所以,你也可以直接说:

    ws.rows(i).Delete
    

    我都测试过并且确认语法是正确的;我看不出您的代码有任何其他问题。

    【讨论】:

    • 将工作表分配给变量时,我没有超出范围的下标
    • @Johnathon64 您是否更改了将工作表分配给变量的方式?因为我没有要求你这样做。这是您之前看到的错误吗?确保您的 ws 名称“原始数据 (2)”正确。
    【解决方案2】:

    修改所有字符串比较,使其更接近,

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

    【讨论】:

    • 刚刚尝试复制并粘贴您的解决方案但出现错误
    • 我很抱歉。我把它写在我的头上并犯了一个错误。 InStr function
    【解决方案3】:

    自动过滤比循环更有效

    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
    

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      相关资源
      最近更新 更多