Zeilen löschen nach Kriterium

Bild

Betrifft: Zeilen löschen nach Kriterium
von: Hannes Respondek
Geschrieben am: 21.08.2015 12:44:03

halli Hallo,
ich habe foglendes Problem.
Ich habe mir eine Liste generiert mit allen Dateien eiens bestimmten Typs in einen Ordner. jetzt möchte ich gerne alle Dateien die ÄLTER als ein bestimmtes Datum sind aus dieser Liste entfernen, dabei soll die ganze Zeile entfernt werden.
Mein derzeitiger Code braucht bei den über 3.000 Zeilen sehr sehr lange. Wie kann der Code beschelunigt werden. Ist eventuell ein Filter sinnvoll? Wenn ja wie kann ich diesen mit VBA setzten?
Hier mein Code:

'###### 3. alle werte die älter&gleich dem letzten Eintrag sind löschen
letztertag = (Range("D6").Value) 'letzter Tag in String konvertieren
anzdateien = Worksheets("Einzulesende Dateien").Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To anzdateien
    If Cells(j, 6).Value <= letztertag Then
    Cells(j, 1).EntireRow.Delete
    j = j - 1
    End If
Next j

Danke im Vorraus!

Bild

Betrifft: AW: Zeilen löschen nach Kriterium
von: Daniel
Geschrieben am: 21.08.2015 12:55:13
Hi
seit Excel 2007 ist folgende Methode die beste (schnell und einfach!)
1. schreibe in eine Hilfsspalte am am Tabellenende eine Formel, welche die zu löschenden Zeilen mit 0 kennzeichnet und die anderen mit der aktuellen Zeilennummer
in deinem Fall wäre das die Formel (für zeile 2): =wenn($F2<Tabelle1!$D$6;0;Zeile())
2. schreibe in die Überschriftenzeile der Hilfsspalte (die Überschriftenzeile wird hier benötigt) ebenfalls die 0
3. Wende auf die ganze Tabelle die Funktion "Daten - DATENTOOLS - DUPLIKATE ENTFERNEN" an, mit der Hilfsspalte als Kriterium und der option "keine Überschrift"
4. Lösche die Hilfsspalte wieder
alternativ kannst du natürlich auch den Autofilter einsetzen, um die betroffenen Zeilen zu filtern und dann zu löschen.
Wie du den Autofilter per VBA aktivierst, zeigt dir doch der Makrorecorder und ggf ein Blick in die Excelhilfe.
allerdings beschleunigt das Filtern das Löschen nur dann, wenn die zu löschenden Zeilen wenige, dafür aber möglichst grosse lückenlos zusammenhängende Blöcke bilden.
dh es ist dann sinnvoll, die Liste vorher zu sortieren (auch da hilft dir der Recorder).
in einer Sortierten Liste könntst du die Zeilennummer der letzen zu löschenden Zeile auch mit der Vergleichsfunktion bestimmen (Worksheetfunction.Match) so dass du die Zeilen als Block direkt löschen kannst, ohne Filter und ohne Schleife (das wäre die schnellste Methode)
gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zeilen löschen nach Kriterium"