Zeilen löschen

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 wer­den, 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 unter­scheidet. 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. Selbst­re­dend 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”]
Dieser Beitrag wurde unter Code-Schnipsel, Mit VBA/Makro, Ohne Makro/VBA, Tabelle und Zelle, Tipps und Tricks abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.