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

Forumthread: Rows delete

Rows delete
23.06.2008 21:15:40
Gregor
Hallo
Ich benutze manchmal den Code Rows(i).delete.
ZB.
For i = 1000 to 1 Step -1
If Cells(i, 1) = "" Then Rows(i).delete
Next
Entweder geht dieser Code ellenlang oder meistens bleibt Excel sogar hängen. Gibt es eine andere Lösung?
Vielen Dank
Gregor

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rows delete
23.06.2008 21:18:00
Hajo_Zi
Hallo Gregor,

Sub Spalte_A_Leer()
'   von NoNet
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub



AW: Rows delete
23.06.2008 21:37:10
Daniel
Hi
die schnellste mir bekannte Methode ist folgende:

Columns(1).insert
with range("A1:A" & cells(rows.count,1).end(xlup).row)
.formulalocal="=wenn(B1="""";"""";Zeile())
.formula = .value
.entirerow.sort Key1:=Range("A1"), header:=xlno
.specialcells(xlcelltypeblanks).entirerow.delete
.entirecolumn.delete
end with


der Code funktioniert in Sekunden, auch in Tabellen mit 60.000 Zeilen
Gruß, Daniel

Anzeige
AW: Rows delete
24.06.2008 10:37:00
Gregor
Vielen Dank
Die 1. Lösung klappt bestens, bei der 2. erhalte ich eine Fehlermeldung wegen überlappenden Markierungen.
Gibt es auch eine Lösung, um schnell Zeilen zu löschen mit einem bestimmten Wert/Ausdruck:
ZB
If Cells(i, 1) = 7 Then Rows(i).delete
oder
If Cells(i, 1) = "Gregor" Then Rows(i).delete
Danke und Gruss
Gregor

Anzeige
AW: Rows delete
24.06.2008 10:48:11
Hajo_Zi
Hallo Gregor,
was ist mit der Lösung im anderem Beitrag. Bei der Aufgabenstellung kann man es wahrscheinlich nicht mehr beschleunigen.
Gruß Hajo

AW: Rows delete
24.06.2008 16:34:00
Gregor
Hajo
Wie gesagt, die 1. Lösung (dein Vorschlag) klappt bestens. Die Leerzellen kann ich damit bestens lösen. Oftmals muss ich jedoch auch Zeilen mit einem bestimmten Wert löschen, die mit dem Code Rows delete ebenfalls Probleme schaffen.
Gregor

Anzeige
AW: Rows delete
24.06.2008 22:31:41
Daniel
Hallo
sorry ich hatte nen kleinen Fehler drin, so sollte es funktionieren:

Sub löschen()
Columns(1).Insert
With Range("A1:A" & Cells(Rows.Count, 2).End(xlUp).Row)
.FormulaLocal = "=wenn(B1="""";"""";Zeile())"
.Formula = .Value
.EntireRow.Sort Key1:=Range("A1"), header:=xlNo
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.EntireColumn.Delete
End With
End Sub


deine anderen Anfordrungen kannst du einfach einbauen, wenn du diese Zeile entsprechend änderst


.FormulaLocal = "=wenn(B1="""";"""";Zeile())"


zum beispiel so:


.FormulaLocal = "=wenn(B1=7;"""";Zeile())"
.FormulaLocal = "=wenn(B1=""Gregor"";"""";Zeile())"
.FormulaLocal = "=wenn(Oder(B1=""Gregor"";B1=7);"""";Zeile())"


um alle Zeilen zu löschen, die entweder "Gregor" oder 7 als Wert haben.
grosser Vorteil dieser Methode ist, du kannst die Formel, die die zu Löschenden Daten kennzeichnet, erstmal unabhängig vom Makro entwickeln und Ausprobieren (könnte ja mal ne komplexere Bedingung sein).
Da die Daten ja erstmal nur gekennzeichnet und nicht gelöscht werden, kannst du immer erst das Ergebnis kontrollieren, bevor du tatsächlich Daten löscht und im Falle eines Fehlers die Daten erst aufwendig wiederherstellen musst.
Gruß, Daniel

Anzeige
Danke
25.06.2008 08:40:36
Gregor
Hallo Daniel
Eine sehr interessante Lösung, vielen herzlichen Dank.
Gregor
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Effizientes Löschen von Zeilen in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um Zeilen in Excel mittels VBA effizient zu löschen, kannst du folgenden Code verwenden. Dieser Code überprüft, ob Zellen leer sind und löscht die entsprechenden Zeilen:

Sub Spalte_A_Leer()
    ' Löscht leere Zeilen in Spalte A
    Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Wenn du bestimmte Werte, wie z.B. "Gregor" oder 7, löschen möchtest, kannst du den folgenden Code verwenden:

Sub löschen()
    Columns(1).Insert
    With Range("A1:A" & Cells(Rows.Count, 2).End(xlUp).Row)
        .FormulaLocal = "=wenn(B1="""";"""";Zeile())" ' Hier kannst du die Bedingung anpassen
        .Formula = .Value
        .EntireRow.Sort Key1:=Range("A1"), Header:=xlNo
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        .EntireColumn.Delete
    End With
End Sub

Häufige Fehler und Lösungen

  1. Überlappende Markierungen: Wenn du eine Fehlermeldung wegen überlappender Markierungen erhältst, stelle sicher, dass der Bereich, den du sortierst und bearbeitest, korrekt definiert ist. Achte darauf, dass du die .Sort-Methode vor dem Löschen der Zeilen anwendest.

  2. Excel bleibt hängen: Wenn Excel beim Löschen von Zeilen hängt, kann dies an der Anzahl der Zeilen liegen, die du löschen möchtest. Versuche, die Schleifen von unten nach oben durchzuführen, um Performance-Probleme zu vermeiden.


Alternative Methoden

Eine weitere Methode, um Zeilen zu löschen, ist die Verwendung der Rows.Delete-Methode in einer Schleife. Hier ist ein Beispiel, das leere Zeilen löscht:

For i = 1000 To 1 Step -1
    If Cells(i, 1) = "" Then Rows(i).Delete
Next i

Diese Methode kann jedoch langsam sein, insbesondere bei großen Datenmengen.


Praktische Beispiele

Wenn du beispielsweise nur die Zeilen löschen möchtest, die den Wert 7 in Spalte B haben, kannst du den Code wie folgt anpassen:

For i = 1000 To 1 Step -1
    If Cells(i, 2) = 7 Then Rows(i).Delete
Next i

Für den Fall, dass du mehrere Bedingungen hast:

For i = 1000 To 1 Step -1
    If Cells(i, 2) = "Gregor" Or Cells(i, 2) = 7 Then Rows(i).Delete
Next i

Tipps für Profis

  • Fehlerbehandlung einfügen: Es ist ratsam, eine Fehlerbehandlung in deinen VBA-Code einzufügen, um Probleme zu vermeiden.

  • Daten sichern: Vor dem Löschen von Zeilen ist es immer klug, eine Sicherungskopie deiner Daten zu machen.

  • Formeln testen: Wenn du eine Formel zur Identifikation der zu löschenden Zeilen verwendest, teste diese zuerst auf einem kleinen Datenbereich, um sicherzustellen, dass sie wie gewünscht funktioniert.


FAQ: Häufige Fragen

1. Wie kann ich eine ganze Zeile in Excel mit VBA löschen?
Du kannst eine ganze Zeile in Excel mit dem Code Rows(i).Delete löschen, wobei i die Zeilennummer ist.

2. Gibt es eine schnellere Methode, um viele Zeilen auf einmal zu löschen?
Ja, die Verwendung von SpecialCells(xlCellTypeBlanks) oder das Sortieren vor dem Löschen kann die Performance erheblich verbessern.

3. Wie kann ich Zeilen löschen, die bestimmte Werte enthalten?
Du kannst eine Schleife verwenden, um die Zellen zu überprüfen und die Zeilen zu löschen, die die angegebenen Werte enthalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige