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

Forumthread: Zeile löschen wenn bestimmte Zellen leer sind

Zeile löschen wenn bestimmte Zellen leer sind
18.01.2013 13:44:59
Tobias
Hallo!
Ich bräuchte nochmal eure Hilfe.
Ich möchte in einem Bereich alle Zeilen löschen, wenn in den Zelle der Spalten 8 und 9 nichts steht.
Mein Code dazu lautet:
sub zeilenloeschen()
Dim BereichD As Long
Dim Zeile As Range
Dim BereichE As Range
BereichD = Worksheets("Tabelle1").Cells(Rows.Count, 3).End(xlUp).Row
Set BereichE = Worksheets("Tabelle1").Range(Cells(1, 8), Cells(BereichD, 9))
For Each Zeile In BereichE.Rows
If Worksheets("Tabelle1").Cells(Zeile, 8) = "" And Worksheets("Tabelle1").Cells(Zeile, 9) = "" Then
Zeile.Delete
End If
Next Zeile
sub end
Er sagt mir aber dass eine "Anwendungs- oder objektorientierter Fehler" vorliegt und stopt in der Zeile:
BereichD = Worksheets("Tabelle1").Cells(Rows.Count, 3).End(xlUp).Row
Kann mir jemand helfen den Code ans laufen zu bekommen?
Herzlichen Dank schonmal!
Tobi

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile löschen wenn bestimmte Zellen leer sind
18.01.2013 13:59:14
Daniel
Hi
wenn du mit mehrern Tabellenblättern arbeitest, solltest du vor jedem CELLS, RANGE, ROWS und COLUMNS immer das Tabellenblatt mit angeben.
Ohne die Tabellenblattangabe beziehen sich diese Zellbezüge immer auf das gerada aktiven Tabellenblatt.
das hat beispielsweise zur Folge, daß in der Zeile:
Set BereichE = Worksheets("Tabelle1").Range(Cells(1, 8), Cells(BereichD, 9))

die Range auf einem anderen Tabellenblatt liegen kann (Tabelle1) als die Zellen, die sie definieren sollen (das aktive Tabellenblatt) und das funktioniert nicht, die Cells müssen auf dem gleichen Tabellenblatt liegen wie die Range.
BereichD = Worksheets("Tabelle1").Cells(Rows.Count, 3).End(xlUp).Row

hier knallts, wenn zufälligerweise kein Tabellenblatt aktiv ist, sondern ein Diagrammblatt, denn dann versucht Rows.Count die Zeilen auf dem aktiven Diagrammblatt zu zählen und das Diagrammblatt hat keine Zeilen, also gibts nen Fehler.
Richtig wäre:
BereichD = Worksheets("Tabelle1").Cells( Worksheets("Tabelle1").Rows.Count, 3).End(xlUp).Row
Set BereichE = Worksheets("Tabelle1").Range( Worksheets("Tabelle1").Cells(1, 8),  Worksheets("Tabelle1").Cells(BereichD, 9))
etwas schreibarbeit kann man sich mit der WITH-Klammer sparen (beachte die Punkte !)
With Worksheets("Tabelle1")
BereichD = .Cells(.Rows.Count, 3).End(xlUp).Row
Set BereichE = .Range(.Cells(1, 8),  .Cells(BereichD, 9))
End With
Gruß Daniel
ps. Warum filtert du nicht einfach mit dem Autofiler in den Spalten nach "Leer" und löschst dann alle Zeilen?
In gefilterten Tabellen werden nur die sichtbaren Zeilen bearbeitet und wenn du nach dem löschen den autofilter wieder aufhebst, sind die vorher ausgeblendeten Zeilen wieder da.
das ist in der Regel schneller, als jede Zeile einzeln per schleife zu löschen.
wie du den Autofilter in VBA einsetzt, kannst du mit dem Recorder rausfinden.
Gruß Daniel

Anzeige
AW: Zeile löschen wenn bestimmte Zellen leer sind
18.01.2013 14:00:10
Rudi
Hallo,
Zeilen immer von unten löschen.
Sub zeilenloeschen()
Dim BereichD As Long
Dim Zeile As Long
Dim BereichE As Range
With Worksheets("Tabelle1")
BereichD = .Cells(Rows.Count, 3).End(xlUp).Row
Set BereichE = .Range(.Cells(1, 8), .Cells(BereichD, 9))
End With
With BereichE
For Zeile = .Rows.Count To 1 Step -1
If .Cells(Zeile, 1) = "" And .Cells(Zeile, 2) = "" Then
.Rows(Zeile).EntireRow.Delete
End If
Next Zeile
End With
End Sub

Gruß
Rudi

Anzeige
AW: Zeile löschen wenn bestimmte Zellen leer sind
18.01.2013 14:11:52
Tobias
Wow!
Herzlichen Dank euch für die Antworten. Die Erkäuterungen helfen mir wirklich sehr die Sache zu verstehen, besonderen Dank hierfür!!!
VG
Tobi

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel löschen, wenn bestimmte Zellen leer sind


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und lade deine Arbeitsmappe.

  2. Öffne den VBA-Editor mit ALT + F11.

  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (dein Arbeitsmappenname)".
    • Wähle Einfügen > Modul.
  4. Kopiere den folgenden Code in das Modul:

    Sub zeilenloeschen()
       Dim BereichD As Long
       Dim Zeile As Long
       Dim BereichE As Range
       With Worksheets("Tabelle1")
           BereichD = .Cells(.Rows.Count, 3).End(xlUp).Row
           Set BereichE = .Range(.Cells(1, 8), .Cells(BereichD, 9))
       End With
       With BereichE
           For Zeile = .Rows.Count To 1 Step -1
               If .Cells(Zeile, 1) = "" And .Cells(Zeile, 2) = "" Then
                   .Rows(Zeile).EntireRow.Delete
               End If
           Next Zeile
       End With
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Führe das Makro aus:

    • Drücke ALT + F8, wähle zeilenloeschen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Anwendungs- oder objektorientierter Fehler:

    • Überprüfe, ob das richtige Tabellenblatt aktiv ist. Achte darauf, dass alle Zellbezüge wie in Daniel's Vorschlag korrekt auf Worksheets("Tabelle1") verweisen.
  • Fehler beim Löschen:

    • Lösche Zeilen immer von unten nach oben, um zu verhindern, dass sich die Zeilenindizes verschieben. Das sorgt dafür, dass das Skript die richtigen Zeilen löscht.

Alternative Methoden

  • Autofilter verwenden:

    • Du kannst die Filterfunktion in Excel nutzen, um alle leeren Zeilen anzuzeigen und diese dann manuell zu löschen. Dies ist oft schneller, besonders bei großen Datenmengen.
  • Bedingte Formatierung:

    • Setze eine bedingte Formatierung, um leere Zellen hervorzuheben. Danach kannst du diese Zellen einfacher identifizieren und die entsprechenden Zeilen löschen.

Praktische Beispiele

  • Beispiel 1: Angenommen, du hast eine Tabelle mit Daten in den Spalten A bis J. Du möchtest alle Zeilen löschen, in denen sowohl Spalte H als auch Spalte I leer sind.

    • Die oben genannte VBA-Methode funktioniert perfekt dafür.
  • Beispiel 2: Wenn du nur die Zeilen löschen möchtest, in denen beispielsweise die Spalte B leer ist, kannst du den Code entsprechend anpassen:

    If .Cells(Zeile, 2) = "" Then
       .Rows(Zeile).EntireRow.Delete
    End If

Tipps für Profis

  • Nutze die With-Klausel: Wie Daniel es vorgeschlagen hat, spart die Verwendung der With-Klausel Schreibarbeit und macht den Code leserlicher.

  • Backup der Daten: Bevor du Zeilen löschst, erstelle immer ein Backup deiner Daten, um versehentlichen Datenverlust zu vermeiden.

  • Optimierung des Codes: Vermeide unnötige Berechnungen in Schleifen, um die Ausführungsgeschwindigkeit zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich das Skript anpassen, um nur bestimmte Spalten zu prüfen? Du kannst die Indizes in der If-Bedingung ändern, um andere Spalten zu prüfen.

2. Was mache ich, wenn ich nur leere Zellen in einer bestimmten Spalte löschen möchte? Ändere die If-Bedingung entsprechend, um nur auf die gewünschte Spalte zuzugreifen und die Zeile zu löschen, wenn diese leer ist.

3. Kann ich auch mehrere Tabellenblätter gleichzeitig bearbeiten? Ja, du musst den Code entsprechend anpassen und durch Schleifen über die verschiedenen Arbeitsblätter iterieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige