使用VBA删除包含特定单词的Excel行

时间:2018-02-27 17:11:44

标签: excel excel-vba vba

我有一个包含数百行的Excel文件,我想要删除列中的所有行" L"其中的单词" SAGI"据说(它代表我工作的公司中的一种文书工作),在同一个单元格中通常有一个关于如何处理SAGI的小描述,因此过滤不是一种选择,因为描述太多。

我想创建一个可以在每次单击时找到并删除这些行的宏。

我发现本教程很有帮助 http://blog.contextures.com/archives/2010/06/21/fast-way-to-find-and-delete-excel-rows/但我无法将其记录为宏,因此我尝试在VBA中对其进行编程。

有一条评论说明如何为它创建一个VBA模块,看起来像这样 Capture 但我最终得到了这个错误,如果我调试它,它会指向第二行。

这是我第一次在VBA中编写一些略显复杂的编曲,但我不知道自己做错了什么

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此VBA功能:

Sub RemoveRows(value As String)
Dim row As Long
row = 1
Do While row <= ThisWorkbook.ActiveSheet.Range("L:L").CurrentRegion.Rows.Count

    If InStr(1, ThisWorkbook.ActiveSheet.Cells(row, 12).Text, value, vbTextCompare) > 0 Then
        ThisWorkbook.ActiveSheet.Cells(row, 12).EntireRow.Delete
    Else
        row = row + 1
    End If
Loop
End Sub

Sub test()
    RemoveRows "SAGI"
End Sub

答案 1 :(得分:0)

尝试一下:

Sub SAGIKiller()
    Dim N As Long, ToBeKilled As Range
    Dim i As Long

    N = Cells(Rows.Count, "L").End(xlUp).Row
    For i = 1 To N
        If InStr(1, Cells(i, "L").Value, "SAGI") > 0 Then
            If ToBeKilled Is Nothing Then
                Set ToBeKilled = Cells(i, "L")
            Else
                Set ToBeKilled = Union(ToBeKilled, Cells(i, "L"))
            End If
        End If
    Next i

    If Not ToBeKilled Is Nothing Then
        ToBeKilled.EntireRow.Delete
    End If
End Sub