Zeilen/Datensätze abhängig vom Inhalt löschen

Hallo,

ich muss aus einer Hilfstabelle eine große Menge an Datsätzen löschen,
und dass immer dann wenn in der Spalte D ein „OK“ steht.
Bei 12.000 Zeilen und ca. 5.000 "OK"´s liefert folgendes das
gewünschte Ergebnis ABER leider mit völlig unbrauch-barer Laufzeit.

Dim i As Long
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 4).End(xlUp).Row To 1 Step -1
If Cells(i, 4) = „OK“ Then Rows(i).Delete
Next i
Application.ScreenUpdating = True

Nach Suchen habe ich folgendes gefunden…
Problem
1.) läufts noch nicht
2.) reichen meine VBA-Kenntnisse (wenn man das mal so nenne will) nicht um dieses Makro entrechend anzupassen

Public Sub ZeilenLöschen()
Dim rngData As Range
Dim rngCell As Range
Dim rngUnion As Range
Dim löschen As Boolean

With Active***
’ Suchbereich
Set rngData = Intersect(.Columns(„D“), .UsedRange)
End With

For Each rngCell In rngData
löschen = False
If rngCell = „weihnachtsmann“ Then löschen = True
If rngCell = „heuschrecke“ Then löschen = True
If rngCell = „abwrackprämie“ Then löschen = True
If löschen Then
If rngUnion Is Nothing Then
Set rngUnion = rngCell
Else
Set rngUnion = Application.Union(rngUnion, rngCell.EntireRow)
End If
End If
Next rngCell

'Zeilen mit gefundenen Wörtern löschen
If Not rngUnion Is Nothing Then rngUnion.EntireRow.Delete
End Sub

Kriegt das jemand schnell angepasst?
Wäre super!!!
Merci!

Hallo,

Bei 12.000 Zeilen und ca. 5.000 "OK"´s liefert folgendes das
gewünschte Ergebnis ABER leider mit völlig unbrauch-barer
Laufzeit.

brauchbare Laufzeit ist natürlich relativ. Es hilft möglicherweise schon die Bildschirmaktualisierung und die automatische Zellenberechnung während der Laufzeit zu deaktivieren.

Kannst mal diesen Code (ungetestet) versuchen:

Sub loeschen()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim von As Long

von = Cells(Rows.Count, 4)

For i = von To 1 Step -1

If Range(„D“ & i).Value2 = „OK“ Then
Rows(i).Delete
End If

Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

Ein anderer Ansatz (möglicherweise der schnellste) wäre, die Tabelle zunächst nach Spalte D zu sortieren, den zu löschenden Bereich zu ermitteln, und dann mehrere Zeilen auf einen Schlag zu löschen.

MfG
Stephan

ich muss aus einer Hilfstabelle eine große Menge an Datsätzen
löschen,
und dass immer dann wenn in der Spalte D ein „OK“ steht.
Bei 12.000 Zeilen und ca. 5.000 "OK"´s liefert folgendes das
gewünschte Ergebnis ABER leider mit völlig unbrauch-barer
Laufzeit.

Hallo Vf,

Sub nn()
Dim Zei As Long
On Error Resume Next
Zei = Cells(Rows.Count, 4).End(xlUp).Row
Range(„D1:smiley:“ & Zei).AutoFilter Field:=1, Criteria1:=„Ok“
Range(„D1:smiley:“ & Zei).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End Sub

Gruß
Reinhard