AW: Zeilen löschen - geht auch in Schnell
03.10.2007 22:28:00
Daniel
Hallo
probier mal das Makro hier, das ist bei mir c.a. 20x schneller als die Schleife von Christian und Jan (getestet mit 10000 Zeilen, von denen 1000 gelöscht werden müssen):
Sub löschen1()
Columns(1).Insert
With Range(Cells(1, 2), Cells(65536, 2).End(xlUp)).Offset(0, -1)
.FormulaR1C1 = "=if(rc2=""Abschnitt"", true, row())"
.Formula = .Value
.EntireRow.Sort key1:=Cells(1, 1), order1:=xlAscending, header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
.EntireColumn.Delete
End With
End Sub
Falls du kurzen Code bevorzugts, kannst du auch das hier verwenden: (ist aber eher langsam, in etwa so wie die Schleife, außderdem kann es passieren, daß es bei sehr grossen Datenmengen nicht mehr korrekt funktioniert)
Sub löschen3()
With Columns(1)
.AutoFilter Field:=1, Criteria1:="Abschnitt"
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
End Sub
wenn die Sortierung der Daten verändert werden darf, oder du einen Schlüssel hast, nach dem du wieder zu zurücksortieren kannst, kannst du auch diesen Code verwenden, der ist kurz und noch einmal mehr als doppelt so schnell wie meine erster vorschlag (also c.a. Faktor 40 gegenüber der Schleife), außerdem sollte es keine Probleme bei sehr grossen Datenmengen geben:
Sub löschen3()
With Columns(1)
.EntireRow.Sort key1:=Cells(1, 1), order1:=xlAscending, header:=xlNo
.AutoFilter Field:=1, Criteria1:="Abschnitt"
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
End Sub
Gruß, Daniel