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
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
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
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
Ü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.
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.
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.
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
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.
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.