删除 row.cell 具有 VBA 特定字符串的行

Delete rows where a row.cell has a specific string with VBA

我有一个包含 390 行的 Excel 文件。第五列只有两个字符串。它是 "YES" 或 "NO"。因此,如果第五列中的单元格包含 "NO" 使用 VBA,我将尝试删除这些行。我可以通过使用过滤器然后使用宏来删除隐藏的行来做到这一点,但我想找到一种方法在 VBAs 中完成它而不使用过滤器。我想更好地学习它,并保留该文件以备将来使用。

我尝试使用在堆栈中找到的一些脚本,但它们不起作用。它们中的大多数用于整数而不是字符串。我试过这个,但它不起作用:

Sub Delete_Rows_With_Specific_String_In_Cell()
  Dim myRow As Long
  Dim myCounter As Long
  myRow = 390 
  For myCounter = myRow To 1 Step -1
    If Cells(myCounter, 5).Value = "NO" Then
        Rows(myCounter).Delete
    End If
  Next
End Sub

我尝试为该列添加第二个 For,但它也没有用。我想找到我已经写过的解决方案。我也许可以在互联网上找到其他脚本,但我想让它基于这段代码工作。

http://analysistabs.com/vba/delete-row-if-cell-contains-string-excel-macro-example-code/

这个解决方案有效

也许您没有作为模块插入?

另一种删除行的方法,可能会更快一些(我没有测试过所以不要引用我的话)- 找出需要先删除哪些行,合并范围并将它们全部删除去吧。

Sub Delete_Rows_With_Specific_String_In_Cell()

    Dim myRow As Long
    Dim myCounter As Long
    Dim rngDeletion As Range
    myRow = 390

    With ThisWorkbook.Worksheets("Sheet1")
        For myCounter = 1 To myRow
            If .Cells(myCounter, 5).Value = "NO" Then
                If rngDeletion Is Nothing Then
                    Set rngDeletion = .Rows(myCounter)
                Else
                    Set rngDeletion = Union(rngDeletion, .Rows(myCounter))
                End If
            End If
        Next
    End With

    rngDeletion.Delete

End Sub

注意:我在代码中使用了 With 关键字来确保我引用了正确的 sheet每时每刻。 有关 With...End With 的解释,请参阅 https://msdn.microsoft.com/en-us/library/wc500chb.aspx