Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Viele Zeilen löschen wenn leer

Viele Zeilen löschen wenn leer
30.10.2017 16:33:28
Ben
Hallo zusammen,
ich will leere Zeilen (leer im definierten Bereich)löschen lassen. Ist das clever so zu lösen, oder soll ich lieber ausblenden?
Ihr seht ja 5000 ist sehr gross und es dauert ewig. Gibt es da eine schnellere, elegantere Lösung?
Option Explicit
Const von = 1, bis = 5000
Sub leere_Zellen_löschen()
Dim z&
For z = von To bis
If WorksheetFunction.Count(Range("C" & z & ":R" & z)) = 0 Then Rows(z).EntireRow.Delete
Next
End Sub
Danke für eure Hilfe!
Grus Ben
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Viele Zeilen löschen wenn leer
30.10.2017 16:38:46
Hajo_Zi
Hallo Ben,
schneller geht es, wenn nicht jede Zeile einzeln gelöscht wird.
Sub Leerzeilen_loeschen2()
'   alle Leerzeilen löschen
Dim LoI As Long
Dim RaZeile As Range
For LoI = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Rows(LoI).SpecialCells(xlCellTypeBlanks).Count = ActiveSheet.UsedRange.SpecialCells( _
xlCellTypeLastCell).Column Then
If RaZeile Is Nothing Then
Set RaZeile = Rows(LoI)
Else
Set RaZeile = Union(RaZeile, Rows(LoI))
End If
End If
Next LoI
If Not RaZeile Is Nothing Then RaZeile.Delete
Set RaZeile = Nothing
End Sub


Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Beiträge von Werner, Luc, robert und folgende lese ich nicht.
Anzeige
AW: Viele Zeilen löschen wenn leer
30.10.2017 17:03:44
Ben
Hallo Hajo,
der Debugger springt an und markiert mir ...
If Rows(LoI).SpecialCells(xlCellTypeBlanks).Count = ActiveSheet.UsedRange.SpecialCells( _
xlCellTypeLastCell).Column Then
woran kann das liegen?
Gruss Ben
AW: Viele Zeilen löschen wenn leer
30.10.2017 17:08:09
Hajo_Zi
Hallo Ben,
Du solltest es in eine Zeile schreiben also den _ den das Forum eingefügt hat entfernen.
Wolltest Du nicht nur einen Bereich prüfen?
Gruß Hajo
Anzeige
AW: Viele Zeilen löschen wenn leer
31.10.2017 14:32:56
Niclaus
Hallo Hajo
Ich habe es versucht mit Deinem Makro Leerzeilen_loeschen2 - den _, den das Forum eingefügt hat, habe ich entfernt. Trotzdem kommt dann für die Zeile
If Rows(LoI).SpecialCells
die Fehlermeldung: Laufzeitfehler 1004. Keine Zellen gefunden.
Ich habe dann nach den zwei Dim folgende Zeile eingefügt:
On Error Resume Next
Nun passiert folgendes: Es werden mir alle Zeilen in der Tabelle gelöscht!
Und noch etwas seltsames: Wenn in meiner Tabelle eine Zeile gefüllte und leere Zellen enthält, werden mit dem Makro alle Zeilen entfernt ausser diejenigen, die gefüllte und leere Zellen enthalten. Als Beispiel gemäss Printscreen: Nach dem Makro-Start verbleiben nur die Zeilen 7, 18 und 21 mit den gelb markierten leeren Zellen. Alle andern sind gelöscht.
Mache ich da etwas falsch? Vielen Dank Niclaus
Userbild
Anzeige
AW: Viele Zeilen löschen wenn leer
31.10.2017 15:47:30
Hajo_Zi
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Schau mal hier
Eine hochgeladene Arbeitsmappe erhöht die Wahrscheinlichkeit, dass Du eine Lösung für Dein Problem erhältst.
Erstelle folglich bitte eine Demomappe, aus der deine Aufgabenstellung klar erkennbar ist und lade diese hoch.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, solltest du diese Daten anonymisieren bzw. pseudonymisieren.
Falls Du den Download des Forums nicht benutzen möchtest beachte bitte: von unsicheren Servern file-upload lade ich keine Datei herunter (lt. Einschätzung meines Virenprogramms)
Gruß Hajo
Anzeige
AW: Viele Zeilen löschen wenn leer
31.10.2017 17:06:58
Niclaus
Hallo Hajo
Ich habe Dein Makro etwas verändert. Jetzt macht es das, was ich gerne hätte: Alle Zeilen in einer Tabelle, die ganz leer sind, werden gelöscht.
Sub Leerzeilen_loeschen3()
Dim LoI As Long
Dim RaZeile As Range
Dim rc%, rb%
On Error Resume Next
For LoI = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
rb = 0
rb = Rows(LoI).SpecialCells(xlCellTypeBlanks).Count
rc = Rows(LoI).SpecialCells(xlCellTypeLastCell).Column
If rb = rc Then
If RaZeile Is Nothing Then
Set RaZeile = Rows(LoI)
Else
Set RaZeile = Union(RaZeile, Rows(LoI))
End If
End If
Next LoI
If Not RaZeile Is Nothing Then RaZeile.Delete
Set RaZeile = Nothing
End Sub

Lange habe ich gebraucht, bis ich realisiert habe, dass rb zu Beginn der Schleife auf 0 gesetzt werden muss.
Vielen Dank. Niclaus
Anzeige
AW: Viele Zeilen löschen wenn leer
30.10.2017 17:06:12
Daniel
Hi
das löschen von Zeilen lässt sich auf zwei Wegen beschleunigen:
1. vor dem löschen die Liste so sortieren, dass alle zu löschenden Zeilen einen lückenlos zusammenhängenden Zellblock bilden, der in einem Schritt gelöscht werden kann
2. ab Excel 2007: zum löschen der Zeilen die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN nutzen
für beide Methoden ist es erforderlich, die zu löschenden Zeilen in einer Hilfsspalte mit einer Formel entsprechend zu kennzeichnen.
hier das Codebeispiel für die zweite Methode. Beachte jedoch, dass die erste Zeile eine Überschriftenzeile sein sollte, da diese logischer Weise stehen bleiben muss:
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(Count(RC3:RC18)=0,0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .column, xlno
.ClearContents
end with
End with
Gruß Daniel
Anzeige
AW: Viele Zeilen löschen wenn leer
30.10.2017 17:36:07
Ben
Hallo Daniel,
puh helf mir mal kurz...
Kannst du mir R1C1, sowie RC3:RC18 erklären?
Weiterhin habe ich in der Hilfsspalte "Z" nun ermitteln, welche Zeilen gelöscht werden sollen.
Markiert mit der Zahl "1". wo füge ich das in deinem Code hinzu?
Danke dir!
Gruss Ben.
AW: Viele Zeilen löschen wenn leer
30.10.2017 20:38:00
Daniel
HI
in der R1C1-Addressierungart steht das R für Row/Zeile und das C für Column/Spalte.
Danach folgt die jeweilige Zeilen- oder Spaltennummer.
R1C1 entspricht also einem $A$1 in normaler Addressierungsart
wenn nach dem R keine Zahl folgt, sondern direkt das C, dann bedeutet dies, dass der Zeilenbezug immer auf die gleiche Zeile geht, in welcher auch die Formel steht, dh es ist ein Relativer Zellbezug
das RC3:RC18 entspricht also dem Bezug: $C1:$R1 (hier C und R als Spaltenbuchstaben), wenn man die Formel in A1-Schreibweise in eine Zelle der 1. Zeile schreibt.
Für die Programmierung ist die R1C1-Schreibweise günstiger, weil mit ihr die Formeln bei relativen Zellbezügen immer gleich aussehen, egal in welche Zelle man sie schreibt.
in meinem Code werden alle Zeilen, die gelöscht werden sollen mit 0 markiert und alle die stehten bleiben müssen mit der aktuellen Zeilennummer. Dann kann man die Zeilen schnell und einfach mit dem Duplikate-Entfernen entfernen, da alles gelöscht wird was 0 ist (und weil eine Zeile mit 0 stehen bleiben wird, sorgt man dafür, dass das die Überschriftenzeile ist).
zu meinem Code muss man eigentlich nichts hinzufügen, der ist schon vollständig.
wenn du aber schon die Zeilen mit 1 markiert hatst, die gelöscht werden sollen, dann müsste man noch wissen, wie du die Zeilen markiert hast, die stehten bleiben sollen.
im Idealfall ist das ein Text wie z.B. "" oder "nicht löschen" (es darf nur keine Zahl sein)
wenn du das schon hast, sortierst du deine Liste nach der Hilfsspalte (kann man auch weglassen, aber dann geht das löschen schneller)
dann selektierst du in der Hilfsspalte alle Zellen mit Zahl über die Menüfunktion START - BEARBEITEN - SUCHEN UND AUSWÄHLEN - INHALTE - FORMELN (oder KONSTANTEN) - ZAHLEN.
dann löschst du diese Zellen mit der Option "ganze Zeilen"
das wäre dann das vorgehen nach meiner ersten Methode.
ich würde dir empfehlen, dass alles erstmal "zu Fuss" auszuprobieren, damit du auch genau weißt, was das Makro tun soll.
Wenn das mal steht, kannst du dir bei der erstellung des Makros vom Recorder helfen lassen.
Gruß Daniel
Anzeige
AW: Viele Zeilen löschen wenn leer
02.11.2017 11:56:27
Ben
Hallo Daniel,
danke schon mal für die ausführliche Erklärung.
Der Weg über sortieren und Zeilen löschen gefällt mir.
Das Suchen und Auswählen funktioniert bei mir allerdings nicht.
In der Hilfsspalte habe ich "1" (soll gelöscht werden) und "" (soll nicht gelöscht werden). Spaltenformat "Standard". Wenn ich nach Zahlen suche, findet Excel keine Zellen.
Muss der zu durchsuchende Bereich zuvor markiert werden?
Danke dir!
Gruss Ben
Anzeige
AW: Viele Zeilen löschen wenn leer
02.11.2017 12:42:52
Daniel
Ja, das Einschränken einer Selektion funktioniert nur, wenn du vorher die Spalte selektiert.
Excel muss ja wissen, in welchem Bereich du nach Zahlen suchst.
Außerdem musst du korrekt angeben, ob die Werte als Fixwerte vorliegen oder als Formeln.
Ebenso ist wichtig, dass du die Zeilen mit der Zahl 1 kennzeichnet und nicht mit dem Text "1"!
Ausprobieren kannst du das ganze über die Menüfunktion
Start - Bearbeiten - Suchen und Auswählen - Inhalte
Für die Umsetzung als Makro den Recorder mitlaufen lassen.
Gruß Daniel
Anzeige
AW: Viele Zeilen löschen wenn leer
02.11.2017 14:04:44
Ben
Hallo zusammen,
danke an alle, die mir geholfen haben in diesem Beitrag. Klappt super.
Ich habe Daniels Ansatz verwendet, da dieser sehr beginnerfreundlich ist ;-)
Gruss Ben

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Leere Zeilen in Excel effizient löschen


Schritt-für-Schritt-Anleitung

Um leere Zeilen in Excel schnell und effizient zu löschen, kannst du die folgende VBA-Makro-Lösung verwenden. Dieses Skript prüft, ob eine Zeile vollständig leer ist, und löscht sie dann:

Sub Leerzeilen_loeschen()
    Dim LoI As Long
    Dim RaZeile As Range
    On Error Resume Next
    For LoI = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
        If Rows(LoI).SpecialCells(xlCellTypeBlanks).Count = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column Then
            If RaZeile Is Nothing Then
                Set RaZeile = Rows(LoI)
            Else
                Set RaZeile = Union(RaZeile, Rows(LoI))
            End If
        End If
    Next LoI
    If Not RaZeile Is Nothing Then RaZeile.Delete
    Set RaZeile = Nothing
End Sub

Führe dieses Makro in der VBA-Umgebung aus, um alle leeren Zeilen in deinem Arbeitsblatt zu löschen.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 1004 - Keine Zellen gefunden.

    • Lösung: Stelle sicher, dass der Bereich, in dem du nach leeren Zellen suchst, korrekt definiert ist. Verwende On Error Resume Next, um den Fehler zu umgehen, aber sei vorsichtig, da dies auch zu unerwünschtem Verhalten führen kann.
  • Fehler: Excel zeigt zu viele Zeilen an.

    • Lösung: Überprüfe, ob dein Arbeitsblatt tatsächlich leere Zeilen enthält. Manchmal können Formatierungen oder unsichtbare Zeichen die Zeilen als "nicht leer" markieren.

Alternative Methoden

  1. Sortieren und Löschen: Sortiere deine Daten so, dass alle leeren Zeilen zusammenhängend sind. Anschließend kannst du diese Zeilen in einem Schritt löschen. Dies ist besonders nützlich, wenn du mit Excel viele Zeilen löschen möchtest.

  2. Datenwerkzeuge verwenden: Ab Excel 2007 kannst du die Funktion „Daten - Datentools - Duplikate entfernen“ nutzen, um leere Zeilen schnell zu löschen. Hierbei musst du die zu löschenden Zeilen zuerst in einer Hilfsspalte kennzeichnen.

Hier ein Beispiel, um diese Methode zu nutzen:

With ActiveSheet.UsedRange
    With .Columns(.Columns.Count + 1)
        .FormulaR1C1 = "=IF(Count(RC3:RC18)=0,0,Row())"
        .Cells(1, 1).Value = 0
        .EntireRow.RemoveDuplicates .Column, xlNo
        .ClearContents
    End With
End With

Praktische Beispiele

Angenommen, du hast eine Excel-Tabelle, in der mehrere leere Zeilen vorhanden sind. Du möchtest diese leeren Zeilen automatisch löschen, um die Übersichtlichkeit zu erhöhen. Verwende das oben genannte Makro "Leerzeilen_loeschen", um dies zu erreichen.

Falls du nur die leeren Zeilen am Ende löschen möchtest, kannst du das Makro anpassen, um nur den gewünschten Bereich zu überprüfen.


Tipps für Profis

  • Verwende Fehlerbehandlung: In deinen Makros kann es nützlich sein, Fehlerbehandlungsroutinen wie On Error Resume Next zu implementieren, um unerwartete Fehler abzufangen.

  • Hilfsspalten: Nutze Hilfsspalten, um leere Zeilen zu identifizieren, bevor du sie löschst. Dies kann helfen, sicherzustellen, dass du nur die gewünschten Zeilen entfernst.

  • Backup der Daten: Bevor du massenhaft Daten löschst, erstelle immer ein Backup, um Datenverluste zu vermeiden.


FAQ: Häufige Fragen

1. Wie lösche ich nur leere Zeilen in einem bestimmten Bereich?
Du kannst das Makro anpassen, um nur den gewünschten Bereich zu durchlaufen, indem du die Schleife entsprechend einschränkst.

2. Warum kann ich einige Zeilen nicht löschen?
Es könnte sein, dass die Zeilen verbundene Zellen enthalten oder durch Filter ausgeblendet sind. Überprüfe die Datenstruktur.

3. Was tun, wenn Excel zu viele Zeilen anzeigt?
Manchmal hilft es, die gesamte Tabelle zu überprüfen und sicherzustellen, dass keine unsichtbaren Zeichen vorhanden sind, die als "nicht leer" gelten.

4. Wie kann ich leere Zellen in einer bestimmten Spalte löschen?
Du kannst das Makro so anpassen, dass es nur die Zellen in der gewünschten Spalte überprüft und die gesamte Zeile löscht, wenn diese Zelle leer ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige