Проблема с фильтрами и удалением всей строки - PullRequest
0 голосов
/ 24 мая 2019

У меня проблема с Entirerow.Delete.
Иногда мой макрос удаляет все строки из листа, а иногда возвращается к последнему порядку обработки ошибок и пропуска.

Я пытался отфильтровать значения, назначить их диапазону и удалить диапазон, но для выполнения программы потребовалось около 20 минут, поэтому мне пришлось прервать обработку.

wb_current.Worksheets("RH").Range("A6:V6").AutoFilter Field:=22, Criteria1:=Array("#N/A", ""), Operator:=xlFilterValues
With wb_current.Worksheets("RH")
    lng_last_row_main = .Cells(Rows.Count, 1).End(xlUp).Row
    If lng_last_row_main > 6 Then
        .Rows("7:" & lng_last_row_main).EntireRow.Delete
    End If
    .AutoFilterMode = False
    lng_last_row_main = .Cells(Rows.Count, 1).End(xlUp).Row
End With

Я бы хотел, чтобы у меня был фильтр, показывающий строки с пустыми или NA в определенном столбце, затем удаляю те строки, содержащие эти значения, затем отключаю фильтр и получаю таблицу без пустых строк.

1 Ответ

0 голосов
/ 24 мая 2019

Александр, может быть, я смогу помочь вашему делу.

Исходя из моего понимания вашей проблемы и желаемого эффекта, действительно ли необходимо использовать фильтр? Если вы используете его только для того, чтобы иметь возможность удалить все пустые строки в определенном столбце, тогда достаточно простого цикла с функцией If.

Пожалуйста, смотрите мой предложенный код ниже:

Sub delete_blank_rows()
Dim lastRow As Long
Dim cel As Range

lastRow = ThisWorkbook.Worksheets("RH").Cells(Rows.Count, 1).End(xlUp).Row

'loop through every cell in column C until the last row (lastRow is taken from column A)
For Each cel In ThisWorkbook.Worksheets("RH").Range("C1:C" & lastRow)

    'function that evaluates if cell in column C is blank/#N/A and deletes it if yes
    If cel.Value = "" Or cel.Value = "#N/A" Then
        cel.EntireRow.Delete
    End If
Next cel

End Sub

Это сработало безошибочно на моих данных выборки. Пожалуйста, имейте в виду, что заголовки находятся в самой первой строке в моих выборочных данных - .Range("C1:C" & lastRow)

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...