Excel VBA для удаления строк по нескольким критериям - PullRequest
0 голосов
/ 02 мая 2018

У меня есть следующий код

Dim CO_priority As String
Dim Col_ticketage As String

CO_priority = Range("Q4").Value
Col_ticketage = Range("Q5").Value

Sheets("Inc").Select
LR = Range("CO_priority" & Rows.Count).End(xlUp).Row
For i = LR To 2 Step -1
    If (Range("CO_priority" & i).Value = "1" And Range("Col_ticketage" & i).Value < "1") Then Rows(i).delete
Next I

Я бы хотел, чтобы этот код удалял строки, если в столбце, заданном переменной "CO_priority", значение равно 1, а в столбце, заданном другой переменной, значение "Col_ticketage" меньше 1.

Итак, скажем, если в ячейке столбца A есть номер 1, а в столбце B номер меньше 1, эту строку следует удалить, но в любом другом случае строка должна остаться.

Приведенный выше код для удаления по какой-либо причине каждой строки.

Не могли бы вы сказать мне, что не так с этим кодом?

1 Ответ

0 голосов
/ 02 мая 2018

Более быстрый способ будет использовать DelRng для объединения всех строк, которые соответствуют вашим 2-критериям, а затем сразу удалить весь диапазон.

Код

Option Explicit           

Sub DelRows()

Dim CO_priority As String
Dim Col_ticketage As String
Dim LR As Long, i As Long
Dim DelRng As Range

CO_priority = Range("Q4").Value
Col_ticketage = Range("Q5").Value

With Sheets("Inc")
    LR = .Range(CO_priority & .Rows.Count).End(xlUp).Row
    For i = LR To 2 Step -1
        If (.Range(CO_priority & i).Value = 1 And .Range(Col_ticketage & i).Value < 1) Then
            If Not DelRng Is Nothing Then
                Set DelRng = Application.Union(DelRng, .Rows(i))
            Else
                Set DelRng = .Rows(i)
            End If
        End If
    Next i
End With
' make sure DelRng is not nothing >> delete entire rows at one-shot
If Not DelRng Is Nothing Then DelRng.Delete

End Sub
...