Когда определенное слово найдено, удалите эту строку И 2 строки ниже. Это возможно с VBA? - PullRequest
0 голосов
/ 10 ноября 2018

Как видно на фото, все мои данные в ОДНОМ столбце. «Триггерное слово» - «Прошлый автомобиль», и нужно удалить весь этот ряд, а также два ряда под ним.

Таким образом, согласно фотографии ниже будут удалены строки 5,6,7 и 18,19,20 и 26,27,28.

Возможно ли это с VBA? Я пытался использовать функции поиска и некоторые приемы VBA, но потерял сознание.

Снимок экрана enter image description here

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Я бы предложил сделать это так

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, поскольку у вас есть только один доступ «записи» к листу.

0 голосов
/ 10 ноября 2018

Необходимо выполнить цикл по ячейкам в столбце A в reverse order и проверить, является ли содержимое ячейки 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...