Попробуйте следующий код, пожалуйста. Это должно быть очень быстро для большого размера диапазона, удаляя все строки сразу:
Sub DeleteRowsAccCriteria()
Dim sh As Worksheet, lastRow As Long, i As Long, rngDel As Range, boolDel As Boolean, Unused As Range
Set sh = ActiveSheet 'use here your sheet
Set Unused = sh.Range("A:H,K:K")
Unused.Delete
lastRow = sh.Range("A" & Rows.count).End(xlUp).Row
sh.UsedRange.Columns(1).Interior.Color = xlNone 'for testing period, to clean the green cells interior
For i = 2 To lastRow
If sh.Range("B" & i).Value <> "G" And sh.Range("B" & i).Value <> "T" Then
boolDel = True
ElseIf sh.Range("C" & i).Value <> "NL" And _
sh.Range("C" & i).Value <> "BE" And _
Not IsEmpty(sh.Range("C" & i).Value) Then
boolDel = True
ElseIf sh.Range("B" & i).Value = "T" And _
sh.Range("C" & i).Value = "NL" And _
left(sh.Range("D" & i).Value, 1) = "0" And _
left(sh.Range("D" & i).Value, 2) <> "06" And _
Len(sh.Range("D" & i).Value) = 10 And _
sh.Range("D" & i).Value Like "##########" Then
boolDel = True
ElseIf sh.Range("B" & i).Value = "G" And _
sh.Range("C" & i).Value = "NL" And _
left(sh.Range("D" & i).Value, 2) = "06" And _
Len(sh.Range("D" & i).Value) = 10 And _
sh.Range("D" & i).Value Like "##########" Then
boolDel = True
ElseIf sh.Range("B" & i).Value = "G" And _
sh.Range("C" & i).Value = "BE" And _
left(sh.Range("D" & i).Value, 2) = "04" And _
Len(sh.Range("D" & i).Value) = 10 And _
sh.Range("D" & i).Value Like "##########" Then
boolDel = True
ElseIf sh.Range("B" & i).Value = "T" And _
sh.Range("C" & i).Value = "BE" And _
left(sh.Range("D" & i).Value, 1) = "0" And _
left(sh.Range("D" & i).Value, 2) <> "04" And _
Len(sh.Range("D" & i).Value) = 9 And _
sh.Range("D" & i).Value Like "#########" Then
boolDel = True
End If
If boolDel Then
If rngDel Is Nothing Then
Set rngDel = sh.Range("A" & i)
Else
Set rngDel = Union(rngDel, sh.Range("A" & i))
End If
End If
boolDel = False
Next
If Not rngDel Is Nothing Then
'rngDel.EntireRow.Delete xlUp
rngDel.Interior.Color = vbGreen
End If
End Sub
Приведенный выше код делает только внутреннюю часть ячеек в A: зеленым цветом для строки, которая будет удалена. Это только на период тестирования . Если все пойдет хорошо, вы должны только не комментировать строку rngDel.EntireRow.Delete xlUp
и прокомментировать / удалить следующую (rngDel.Interior.Color = vbGreen
) и sh.UsedRange.Columns(1).Interior.Color = xlNone
.