Zeilen löschen

Zeilen mit bestimmten Inhalten löschen

Excel, alle Ver­sio­nen

Immer wieder beliebt: Es sollen per VBA Zeilen gelöscht wer­den, welche eine bes­timmte Bedin­gung erfüllen. Im fol­gen­den Beispiel sollen alle Zeilen ab Zeile 11 gelöscht wer­den, wo in Spalte C ein a oder ein A ste­ht. Es sind bei­de Zeichen aufge­führt, weil VBA im Gegen­satz zu Excel-Funk­tio­nen zwis­chen Groß- und Klein­schrei­bung unter­scheidet. Und selb­stver­ständlich ist gemeint, dass auss­chließlich das eine gesuchte Zeichen in der Zelle ste­ht und nicht ein Teil ein­er Zeichen­kette. Fol­gen­der Code ist Stan­dard und wird häu­fig in dieser Form ver­wen­det:

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 funk­tion­iert ein­wand­frei und reicht in den meis­ten Fällen auch aus. Bei sehr vie­len Zeilen (also Daten­sätzen) kann die Aus­führung aber länger dauern als erwartet und als erwün­scht. Manch­mal reicht es, die Bild­schir­mak­tu­al­isierung vorüberge­hend per

Application.ScreenUpdating = False

auszuschal­ten. Wenn das nicht reicht, bietet sich ein Code an, der erhe­blich schneller ist als der Stan­dard:

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 Unter­schied liegt im rng­Da­ta in Verbindung mit dem Union(). Im über­tra­ge­nen Sinne wird hier per Pro­gram­mierung jede passende Zeile mit Strg markiert und am Ende mit einem Druck auf die Taste Entf auf einen Schlag gelöscht.

Bei­de Dateien liegen als *.zip gepackt in *.txt-Form hier zum Down­load bere­it. Selbst­re­dend kön­nen Sie auch den obi­gen Code markieren, kopieren und dann in Ihr Mod­ul ein­fü­gen.

Hin­weis: Ohne VBA geht das sehr ein­fach und schnell, wenn Sie den Aut­ofil­ter ver­wen­den. Und natür­lich lässt sich auch der Aut­ofil­ter per VBA nutzen, das entspricht in Sachen Geschwindigkeit etwa dem zweit­ge­nan­nten Mod­ell. Durch aufze­ich­nen per Makrorecorder und vielle­icht eini­gen kleinen Nachbesserun­gen lässt sich das gut real­isieren.

[NachOben­Let­zte 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.