Как удалить все строки в таблице не выделенные цветом на VBA (exel)

программирование программы windows excel VBA


Примечание:
Во-первых более красиво выглядит так, а во-вторых нужно удалят НЕ ЗАКРАШЕННЫЕ ячейки, а не те которые закрашены.
Sub DelRowsIfNotFill()
Dim a As Integer, b As Integer
a = Range("A1").CurrentRegion.Rows.Count
b = Range("A1").CurrentRegion.Columns.Count
For j = 1 To b
For i = 1 To a
If Not Cells(i, j).Interior.Pattern = xlNone Then
Rows(i).Delete
End If
Next
Next
End Sub
Если вместо " =xlNone" поставить "<>xlNone", топроисходить зацикливание и код удаляет вообще все строки

Помогите если кто-то в этом разбирается
Ответы:
Sub test2()
   r = 1
   Do
       If Not Cells(r, 1).Interior.Pattern = xlNone Then
           Rows(r).Delete
       Else
           r = r + 1
       End If
   Loop Until r = 20 'количество строк в таблице
End Sub
Во-первых, не понятно зачем вы проходитесь циклом по столбцам, если вся строка закрашена, достаточно и одного столбца.
Во-вторых, переменная а, определённая один раз, не имеет смысла, тк после удаления строк их, естественно, будет уже меньше
и цикл просто тупо будет долбить по всем ячейкам.
Вот вам тоже самое, только вид с боку:
Sub DelRowsIfNotFill()
   Dim i As Integer
   i = 1
   Do
       If Cells(i, 1).Interior.Pattern = xlNone Then
           Rows(i).Delete
       Else
           i = i + 1
       End If
   Loop While Len(Cells(i, 1)) > 0
End Sub
Еще вариант кода
Sub УдалениеНеЦветныхСтрок()
   Dim ra As Range, delra As Range
   For Each ra In Range("A1:A20")
       If ra.Interior.Pattern = xlNone Then
           If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
       End If
   Next
   If Not delra Is Nothing Then delra.EntireRow.Delete
End Sub


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.