找到一个特定的单词时,删除该行和下面的2行。 VBA可以做到这一点吗?

时间:2018-11-10 07:25:36

标签: excel vba excel-vba excel-formula

如图所示,我所有的数据都在一个列中。 “触发词”是“过去的汽车”,希望删除整行以及其下的两行。

因此,根据下面的照片,第5、6、7和18、19、20和26、27、28行将被删除。

使用VBA可以吗?我曾尝试使用搜索功能和某些VBA技术,但不知所措。

屏幕截图enter image description here

2 个答案:

答案 0 :(得分:2)

我建议那样做

Option Explicit

Sub DelIt()
Const PAST_CAR = "Past Car"
Const OFF_SET = 3
Dim lastRow As Long, i As Long
Dim ws As Worksheet
Dim deleteRange As Range

    Set ws = ActiveSheet
    lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row

    With ws
        For i = 1 To lastRow
            If .Cells(i, 1).Value = PAST_CAR Then
                If deleteRange Is Nothing Then
                    Set deleteRange = .Rows(i).Resize(OFF_SET)
                Else
                    Set deleteRange = Union(deleteRange, .Rows(i).Resize(OFF_SET))
                End If
            End If
        Next i
    End With

    If Not (deleteRange Is Nothing) Then
        deleteRange.EntireRow.Delete
    End If

End Sub

通过这种方式,您无需向后循环或打开ScreenUpdatings,因为您只能对工作表进行“写”访问。

答案 1 :(得分:0)

您必须循环访问reverse order中A列中的单元格,并检查单元格内容是否为Past Car,如果是,则相应地删除行。

您可以尝试这样的事情...

Sub DeleteRows()
Dim lr As Long, i As Long
Application.ScreenUpdating = False
lr = Cells(Rows.Count, "A").End(xlUp).Row
For i = lr To 1 Step -1
    If Cells(i, 1) = "Past Car" Then
        Range("A" & i).Resize(3).EntireRow.Delete
    End If
Next i
Application.ScreenUpdating = True
End Sub