hier der kommentierte Code
04.10.2011 14:44:52
Tino
Hallo,
es wird eine Hilfsspalte verwendet und in dieser wie im Code beschrieben eine Formel erstellt.
Diese Formel ergibt die Zeilennummer oder einen Wahrheitswert (Wahr).
Nach dieser Spalte wird sortiert und alle Zeilen mit Wahr in der Hilfsspalte
(die stehen alle unten zusammen) gelöscht.
Sortieren weil Excel zusammenhängende Bereiche schneller löschen kann
als wenn diese wild verstreut liegen.
Normalerweise würde das sortieren auch reichen weil dann alle Leerzeilen unten stehen,
aber wenn die Zellen Formatiert sind, wird Dein Benutzter Bereich (UsedRange) unnötig groß,
daher ziehe ich es vor diese Zeilen komplett zu löschen.
Sub LoescheLeere()
Dim iCalc%
With Application
iCalc = .Calculation 'zustand Berechnung merken
.ScreenUpdating = False 'Bildschirmaktualisierung aus
.EnableEvents = False 'Events aus
.Calculation = xlCalculationManual 'Berechnung auf manuell
'benutzter Bereich der Tabelle
With Tabelle1.UsedRange 'Tabelle anpassen
'Benutzter Bereich + eine Hilfsspalte für Formel
With .Range(.Cells, .Columns(.Columns.Count).Offset(0, 1))
'ergibt die Formel: =WENN(ANZAHL2($A1:C1)>0;ZEILE();WAHR)
'auf die Dollarzeichen achten
.Columns(.Columns.Count).FormulaR1C1 = "=IF(COUNTA(RC1:RC[-1])>0,ROW(),TRUE)"
'Bereich nach Hilfsspalte sortieren, Excel kann zusammenhängende Bereiche schneller löschen
.Sort Key1:=.Cells(1, .Columns.Count), Order1:=xlAscending, Header:=xlNo
On Error Resume Next 'Errorbehandlung
'Zeile mit Formelergebnis WAHR löschen
.Columns(.Columns.Count).SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
'Hilfsspalte löschen
.Columns(.Columns.Count).EntireColumn.Delete
On Error GoTo 0
End With
End With
.Calculation = iCalc 'Berechnung auf alten stand
.ScreenUpdating = True 'Bildschirmaktualisierung ein
.EnableEvents = True 'Events ein
End With
End Sub
Gruß Tino