вы можете написать вспомогательную функцию, которая принимает диапазон для сканирования, текст для поиска и найденный диапазон в качестве параметров и возвращает True
, если найденный диапазон действительно найден:
Function GetCellWithText(rngToScan As Range, txtToSearch As String, foundRng As Range) As Boolean
With rngToScan
Set foundRng = .Find(what:=txtToSearch, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False, after:=.Cells(.Count))
End With
GetCellWithText = Not foundRng Is Nothing
End Function
и использоватьв основном коде он выглядит следующим образом:
Option Explicit
Sub DeleteRowsBetweenCellsWithSpecificTexts()
Dim txt1Rng As Range, txt2Rng As Range
With Range("B1", Cells(Rows.Count, 2).End(xlUp)) ' reference currently active sheet column B range from row 1 down to last not empty one
If Not GetCellWithText(.Cells, "Description", txt1Rng) Then Exit Sub ' if first text not found do nothing
If Not GetCellWithText(.Cells, "Transportation", txt1Rng) Then Exit Sub ' if second text not found do nothing
If txt2Rng.Row = txt1Rng.Row + 1 Then Exit Sub ' if found cells are adjacent then do nothing
End With
Range(txt1Rng.Offset(1), txt2Rng.Offset(-1)).Delete
End Sub
этот код действует на текущем активном листе
, если вам нужно запустить его на определенном листе, тогда просто укажите правильные спецификации листа перед вызовами Range(т.е. Worksheets("MySheetName").Range(...)
)