如图所示,我所有的数据都在一个列中。 “触发词”是“过去的汽车”,希望删除整行以及其下的两行。
因此,根据下面的照片,第5、6、7和18、19、20和26、27、28行将被删除。
使用VBA可以吗?我曾尝试使用搜索功能和某些VBA技术,但不知所措。
答案 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