Страницы: 1
RSS
удалить строку по значению и индексу заливки ячейки, доработать условие для отбора строк по условию в макросе
 
Здравствуйте!
У меня в таблице выделяются определенной заливкой строки по определенному условию,
в том числе встречаются строки с пустыми значениями.
Мне необходимо удалить строки именно с этой заливкой, но при условии,
что в строке с определенным диапазоном нет значений (пусто).
Макрос сейчас удаляет строку если хоть одна ячейка пустая и имеет указанную заливку.
Код
Set ra = ws3.Range(ws3.Range("G4"), ws3.Range("G" & B)).Resize(, 11)
  
    Dim rCell As Range, delAr As Range
    
    For Each rCell In ra
        If rCell.Text = "" And rCell.Interior.color = 13408767 Then
            If delAr Is Nothing Then
                Set delAr = Range(rCell.Row & ":" & rCell.Row)
            Else
                Set delAr = Union(delAr, Range(rCell.Row & ":" & rCell.Row))
            End If
        End If
    Next
        If Not delAr Is Nothing Then delAr.Delete
А мне надо, чтобы удаление строк было если все ячейки в диапазоне с пустыми значениями и имеют заливку с индексом = 13408767
Код
Set ra = ws3.Range(ws3.Range("G4"), ws3.Range("G" & B)).Resize(, 11)
Помогите, пожалуйста, изменить код. Файл таблицы приложила.
 
Цитата
написал:
все ячейки в диапазоне
В каком диапазоне?
 
В диапазоне ra, т.е от G4 + 11 столбцов
Код
Set ra = ws3.Range(ws3.Range("G4"), ws3.Range("G" & B)).Resize(, 11)
 
Ma_Ri Здравствуйте. Может так будет работать.
Код
Sub enstaralgh()
Dim delAr As Range, Rg1 As Range, i&, j&, nRow&, nSt&
Set Rg1 = Range(Range("G4"), Range("G" & 16)).Resize(, 11)
nRow = Rg1.Rows.Count
nSt = Rg1.Columns.Count
For i = 1 To nRow
    For j = 1 To nSt
If Not (Rg1.Cells(i, j).Text = "" And Rg1.Cells(i, j).Interior.Color = 13408767) Then Exit For
If j = nSt Then If delAr Is Nothing Then Set delAr = Rg1.Cells(i, j) Else Set delAr = Union(delAr, Rg1.Cells(i, j))
    Next j
Next i
If Not delAr Is Nothing Then delAr.EntireRow.Delete
End Sub
 
Если вся строка в диапазоне покрашена можно по ячейкам столбцов не бегать, Будет пошустрее.
Код
Sub enstaral22()
Dim delAr As Range, Rg1 As Range, i&
Set Rg1 = Range(Range("G4"), Range("G" & 16)).Resize(, 11)
For i = 1 To Rg1.Rows.Count
    If Application.WorksheetFunction.CountA(Rg1.Rows(i)) = 0 Then
        If Rg1.Cells(i, 1).Interior.Color = 13408767 Then
If delAr Is Nothing Then Set delAr = Rg1.Rows(i) Else Set delAr = Union(delAr, Rg1.Rows(i))
        End If
    End If
Next i
If Not delAr Is Nothing Then delAr.EntireRow.Delete
End Sub
 
Здравствуйте!
Евгений Смирнов, приветствую Вас!
Цитата
написал:
Может так будет работать.
Благодарю Вас за код, первый работает прекрасно, второй мне пока не понадобится,
потому, что строки не полностью залиты.
в строке
Код
Set Rg1 = Range(Range("G4"), Range("G" & 16)).Resize(, 11)
поправила Range("G" & 16), на последнюю заполненную ячейку в диапазоне.
Хочу поблагодарить еще одного человека.
Вчера здесь на форуме нашла код, который меня полностью устроил и работает отлично
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=114887&TITLE_SEO=114887-poisk-i-udalenie-pustykh-strok-na-liste.-vba&tags=трейдинг
Anchoret, сообщение #5
Anchoret, Евгений Смирнов спасибо за прекрасные решения, вы как всегда великолепны! )
Страницы: 1
Наверх