Zeilen mit bestimmten Inhalten löschen
Excel, alle Versionen
Immer wieder beliebt: Es sollen per VBA Zeilen gelöscht werden, welche eine bestimmte Bedingung erfüllen. Im folgenden Beispiel sollen alle Zeilen ab Zeile 11 gelöscht werden, wo in Spalte C ein a oder ein A steht. Es sind beide Zeichen aufgeführt, weil VBA im Gegensatz zu Excel-Funktionen zwischen Groß- und Kleinschreibung unterscheidet. Und selbstverständlich ist gemeint, dass ausschließlich das eine gesuchte Zeichen in der Zelle steht und nicht ein Teil einer Zeichenkette. Folgender Code ist Standard und wird häufig in dieser Form verwendet:
Option Explicit Sub ZeilenLoeschen_Standard() Dim lastRow As Long, Zeile As Long With ActiveSheet lastRow = .Cells(Rows.Count, 3).End(xlUp).Row For Zeile = lastRow To 11 Step -1 If UCase(.Cells(Zeile, 3)) = "A" Then.Rows(Zeile).Delete Next Zeile End With End Sub
Dieser Code funktioniert einwandfrei und reicht in den meisten Fällen auch aus. Bei sehr vielen Zeilen (also Datensätzen) kann die Ausführung aber länger dauern als erwartet und als erwünscht. Manchmal reicht es, die Bildschirmaktualisierung vorübergehend per
Application.ScreenUpdating = False
auszuschalten. Wenn das nicht reicht, bietet sich ein Code an, der erheblich schneller ist als der Standard:
Option Explicit Sub ZeilenLoeschen_Schnell() Dim LastRow As Long, Zeile As Long Dim rngData As Range LastRow = .Cells(Rows.Count, 34).End(xlUp).Row With ActiveSheet For Zeile = LastRow To 11 Step -1 If UCase(.Cells(Zeile, 3)) = "A" Then If rngData Is Nothing Then Set rngData = .Rows(Zeile) Else Set rngData = Union(rngData, .Rows(Zeile)) End If End If Next Zeile End With If Not rngData Is Nothing Then rngData.Rows.Delete Set rngData = Nothing End If End Sub
Der Unterschied liegt im rngData in Verbindung mit dem Union(). Im übertragenen Sinne wird hier per Programmierung jede passende Zeile mit Strg markiert und am Ende mit einem Druck auf die Taste Entf auf einen Schlag gelöscht.
Beide Dateien liegen als *.zip gepackt in *.txt-Form hier zum Download bereit. Selbstredend können Sie auch den obigen Code markieren, kopieren und dann in Ihr Modul einfügen.
Hinweis: Ohne VBA geht das sehr einfach und schnell, wenn Sie den Autofilter verwenden. Und natürlich lässt sich auch der Autofilter per VBA nutzen, das entspricht in Sachen Geschwindigkeit etwa dem zweitgenannten Modell. Durch aufzeichnen per Makrorecorder und vielleicht einigen kleinen Nachbesserungen lässt sich das gut realisieren.
[NachObenLetzte Verweis=„T&T: Zeilen löschen”]