Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: cpt_nemo от 12 августа 2020, 22:36

Название: Excel VBA Макросы: Удаление строк на листе по заданному условию.
Отправлено: cpt_nemo от 12 августа 2020, 22:36
Необходимо удалить строки с 1 по 53, но если ячейка H53 в строке 53 содержит часть текста "л/счет:", то строку 53 оставить (удалить только строки с 1 по 52).
Название: Re: Excel VBA Макросы: Удаление строк на листе по заданному условию.
Отправлено: Администратор от 13 августа 2020, 06:57
В этом макросе искомая фраза ищется в каждой строке:
Макрос 1
Sub Макрос()

    Dim i As Long
   
   
    ' Отключение монитора, чтобы ускорить макрос.
        ' Можно ещё отключить формулы, если их много.
    Application.ScreenUpdating = False
   
    ' Удаление строк.
    For i = 53 To 1 Step -1
        If InStr(1, Cells(i, "H").Value, "л/счет:", vbTextCompare) = 0 Then
            Rows(i).Delete Shift:=xlUp
        End If
    Next i

End Sub
[свернуть]

В этом макросе искомая фраза ищется только в строке 53:
Макрос 2
Sub Макрос()
   
    ' Если в ячейке "H53" есть искомая фраза.
    If InStr(1, Range("H53").Value, "л/счет:", vbTextCompare) <> 0 Then
        Rows("1:52").Delete
    ' Если в ячейке "H53" нет искомой фразы.
    Else
        Rows("1:53").Delete Shift:=xlUp
    End If
   
End Sub
[свернуть]

Нужно понимать, что искомая фраза может быть частью другого более длинного слова. Например, если надо найти слово "тер", то будет найдено и слово "компьютер". Данные макросы найдут слово "компьютер" при поиске слова "тер".
Название: Re: Excel VBA Макросы: Удаление строк на листе по заданному условию.
Отправлено: cpt_nemo от 23 августа 2020, 11:19
Большое Вам спасибо за ответ.