вы можете сделать это следующим образом:
Public Sub DeleteAllRowsWithNoHighlitedCells()
Dim iRow As Long
Dim lastColumn As Long
Dim aktRow As Range
Dim owsh As Worksheet
Set owsh = ActiveSheet
iRow = 1
lastColumn = 7
Do Until owsh.Cells(iRow, 1) = ""
Set aktRow = owsh.Range(Cells(iRow, 1), Cells(iRow, lastColumn))
If Not AktRowHasHighlightedCells(aktRow) Then
owsh.Rows(aktRow.Row).Delete
iRow = iRow - 1
End If
iRow = iRow + 1
Loop
End Sub
Частная функция AktRowHasHighlightedCells (ByVal aktRow As Range) как логическое значение Dim aktcell как вариант
For Each aktcell In aktRow.Cells
If aktcell.Interior.ColorIndex = 3 Then
AktRowHasHighlightedCells = True
Exit Function
End If
Next aktcell
AktRowHasHighlightedCells = False
End Function
Чтобы объяснить, что я имею в виду.Сначала вы должны создать кнопку и поместить DeleteAllRowsWithNoHiglitedCells - процедуру за событием Click.Затем, пока Column1 для каждой строки не будет пустым, каждая ячейка в выбранной строке от column1 до lastColumn (вы должны определить или вы также можете получить lastusedColumn через VBA) проверяется на Interior.Colorindex = 3 (жестко закодированный красный). ЕслиФункция AktRowHasHighlightedCells имеет значение false, строка будет удалена, а rowCounter будет уменьшен.