Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: vba, Zeilen löschen = langsam

vba, Zeilen löschen = langsam
05.06.2020 15:56:24
Fred
Hallo Excel Profis,
ich möchte gerne jede Zeile löschen, in der in Spalte 51 kein Wert steht.
lz = Cells(Rows.Count, 1).End(xlUp).Rows.Row
For t = lz To 2 Step -1
If Cells(t, 51).Value = "" Then
Rows(t).Delete Shift:=xlUp
End If
Next t

Es klappt,- allerdings dauert es unglaublich lange (bei gesamt 2000 DS, wobei 1700 gelöscht werden solle)
Gibt es eine clevere vba-Lösung?
Gruss
Fred
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba, Zeilen löschen = langsam
05.06.2020 16:00:35
Hajo_Zi
Hallo Fred,
lösche alle mit einmal.
Option Explicit
Sub DoppelteWerte_löschen()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim RaZelle As Range
Dim IntRow As Long
Dim Start As Long
IntRow = IIf(IsEmpty(Cells(Rows.Count, 1)), _
Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
For Start = IntRow To 1 Step -1
If Not IsEmpty(Cells(Start, 1)) Then
If Application.CountIf(Range("A1:A" & Start), Cells(Start, 1)) > 1 Then
If RaZelle Is Nothing Then
Set RaZelle = Cells(Start, 1)
Else
Set RaZelle = Union(RaZelle, Cells(Start, 1))
End If
End If
End If
Next
If Not RaZelle Is Nothing Then RaZelle.ClearContents
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Anzeige
AW: vba, Zeilen löschen = langsam
05.06.2020 16:12:13
UweD
Hallo
so?

With ActiveSheet
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
.Columns(51).AutoFilter Field:=1, Criteria1:="="
Intersect(.Columns(51), .UsedRange).Offset(1, 0).SpecialCells(xlCellTypeVisible). _
EntireRow.Delete 'gefilterte Zeilen löschen
.AutoFilterMode = False ' Autofilter ausschalten
End With

Anzeige
AW: vba, Zeilen löschen = langsam
05.06.2020 16:20:33
Fred
Hallo UweD,
mit deinem Code geht das ratzfatz,- mein ursprünglicher "hing sich anscheinend immer wieder auf".
Das Makro von Hajo erzielte leider nicht das Ergebnis (löschte nur den Inhalt von Zellen,- bzw "dopplern")
Danke UweD
und schönes Wochenende
Gruss
Fred
Dazu braucht man eigentlich kein Makro
05.06.2020 16:12:21
Matthias
Hallo
Komplette Spalte markieren
F5 drücken
Inhalte
Leerzellen anwählen
Ok
Jetzt mit der rechten Maustaste Zellen löschen wählen
Ganze Zeile anwählen.
Oder als Makro:
Columns("AY:AY").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Gruß Matthias
Anzeige
AW: vba, Zeilen löschen = langsam
05.06.2020 16:22:34
Daniel
Hi
Zeilen einzeln löschen ist langsam.
Für Excel ist es der gleiche Aufwand, eine Zeile zu löschen oder 1000, sofern die Zeilen einen lückenlosen Block bilden.
Wenn die Zellen in Spalte 51 leer sind, so:
Columns(51).SpecialCells(xlcelltypeblanks).EntireRow.delete
Noch schneller gehts, wenn du vorher nach Spalte 51 sortierst.
Sollten die Zellen keine echten Leerzellen sein oder sortieren unerwünscht, dann bietet sich noch das Duplikate Entfernen an:
With ActiveSheet.usedrange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=If(RC51="""",0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .Columns, xlno
.ClearContents
Ende With
Ende With
Gruß Daniel
Anzeige
AW: vba, Zeilen löschen = langsam
05.06.2020 16:25:38
Fred
Hallo Daniel,
dein und Matthias
Columns(51).SpecialCells(xlcelltypeblanks).EntireRow.delete
tut es prächtig.
Danke!
AW: vba, Zeilen löschen = langsam
05.06.2020 16:50:39
Werner
Hallo Fred,
da sollte aber noch eine Fehlerbehandlung rein. Wenn keine Leerzelen in Spalte 51 vorhanden sind, dann läuft das Makro in einen Fehler.
Gruß Werner
Anzeige
AW: vba, Zeilen löschen = langsam
05.06.2020 21:15:52
GerdL
Moin!
Richtig!

With Columns(51)
If WorksheetFunction.CountBlank(.Cells) > 0 Then
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
End With

Gruß Gerd
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Effektives Löschen von Zeilen in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA gezielt leere Zeilen zu löschen, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor mit ALT + F11.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub ZeilenLoeschen()
       Dim lz As Long
       Dim t As Long
       lz = Cells(Rows.Count, 1).End(xlUp).Row
       For t = lz To 2 Step -1
           If Cells(t, 51).Value = "" Then
               Rows(t).Delete Shift:=xlUp
           End If
       Next t
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf "Ausführen" klickst.

Mit diesem VBA-Skript kannst du gezielt alle Zeilen löschen, in denen in Spalte 51 kein Wert steht.


Häufige Fehler und Lösungen

  • Das Makro läuft extrem langsam.

    • Lösung: Anstelle von zeilenweise löschen, kannst du gefilterte Zeilen löschen. Verwende folgenden Code:
    With ActiveSheet
        If .AutoFilterMode Then .AutoFilterMode = False
        .Columns(51).AutoFilter Field:=1, Criteria1:="="
        Intersect(.Columns(51), .UsedRange).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        .AutoFilterMode = False
    End With
  • Fehler bei der Ausführung, wenn keine leeren Zellen vorhanden sind.

    • Lösung: Füge eine Fehlerbehandlung hinzu:
    With Columns(51)
        If WorksheetFunction.CountBlank(.Cells) > 0 Then
            .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        End If
    End With

Alternative Methoden

Wenn du keine VBA-Makros verwenden möchtest, kannst du auch manuell alle leeren Zeilen in Excel löschen:

  1. Markiere die gesamte Spalte, in der du die leeren Zellen suchst.
  2. Drücke F5 und wähle "Inhalte".
  3. Wähle "Leerzellen" und klicke auf "OK".
  4. Klicke mit der rechten Maustaste auf eine der markierten Zellen und wähle "Zellen löschen".
  5. Wähle "Ganze Zeile" und klicke auf "OK".

In Google Sheets kannst du leere Zeilen ebenfalls mit einem ähnlichen Ansatz löschen.


Praktische Beispiele

Hier sind einige praktische Beispiele für das Löschen von Zeilen in Excel:

  1. Ganze Zeile löschen für leere Zellen in Spalte 51:

    Columns(51).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  2. Alle Zeilen mit bestimmten Kriterien löschen:

    With ActiveSheet
       .Columns(51).AutoFilter Field:=1, Criteria1:="=DeinKriterium"
       Intersect(.Columns(51), .UsedRange).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
       .AutoFilterMode = False
    End With

Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um die Anzeige während des Löschvorgangs zu deaktivieren. Das beschleunigt den Prozess erheblich.

    Application.ScreenUpdating = False
    ' Dein Lösch-Code hier
    Application.ScreenUpdating = True
  • Sortiere die Daten vor dem Löschen, um die Leistung zu verbessern. Wenn die leeren Zellen zusammenhängend sind, ist das Löschen schneller.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Daten gesichert sind, bevor ich Zeilen lösche? Du kannst eine Kopie deiner Arbeitsmappe speichern, bevor du das Makro ausführst.

2. Was passiert, wenn ich versehentlich die falschen Zeilen lösche? Falls du versehentlich falsche Zeilen gelöscht hast, kannst du die "Rückgängig"-Funktion in Excel (STRG + Z) verwenden, um die Änderungen rückgängig zu machen.

3. Ist es möglich, leere Zellen in einer bestimmten Zeile zu löschen? Ja, du kannst den gleichen Ansatz verwenden und den Bereich auf die spezifische Zeile beschränken, in der du die Zellen leeren möchtest, anstatt die gesamte Spalte zu betrachten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige