Excel VBA eine große Menge leere Zeilen löschen?
Hallo, ich lade eine menge Datensätze in eine Tabelle rein und dabei werden auch die leeren Zeilen zwischendurch mal reinkopiert. Diese möchte ich nun entfernen. Das gelingt mir mittlerweile auch. Das Problem ist, dass es zu lange dauert bei ca. 2800 leere Zeilen, da diese einzeln angeschaut werden und gelöscht. Mein bisheriger Code:
Function loescheLeerenBereichn()
Dim Zelle As Long
Dim LetzteZeile As Long
LetzteZeile = Sheets("Lieferung").UsedRange.SpecialCells(xlCellTypeLastCell).Row
For Zelle = LetzteZeile To 7 Step -1 ' In Range(Cells(7, 4), Cells(LetzteZeile, 4))
If Cells(Zelle, 3) = "" Or Cells(Zelle, 3) = "." Then
Rows(Zelle).EntireRow.Delete Shift:=xlUp
End If
Next Zelle
End Function
Wie kann man das schneller programmieren?
4 Antworten
Vielleicht eine Alternative!?:
Kannst Du eine leere Zeile anhand einer bestimmten leeren Zelle definieren?
Dann einfach die Spalte dieser Zellen markieren (am besten bis zum letzten Eintrag)/ F5 (Gehe zu)/ Inhalte: Leerzellen/ OK/ Rechtsklick / Zellen löschen/ Ganze Zeile.
Falls es VBA sein muss, kannst Du das sicher auch über den Makrorekorder aufnehmen und umsetzen.
Das sollte mit dieser Vorgehensweise in ein paar Sekunden klappen.
Bei nur 2800 Leerzeilen sogar unter 1 Sekunde.
Hast Du es mal ausprobiert?
Wenn jeweils viele leere Zeilen zusammenhängen, geht es vielleicht schneller, diese Gruppen zu ermitteln und einzeln zu löschen.
Möglicherweise geht es auch, die zu berücksichtigenden Zeilen zu kopieren (direkt in Excel geht das mit Strg+Klick), in ein neues Tabellenblatt einzufügen und das alte Tabellenblatt zu entfernen.
Kannst Du die Tabelle nicht mit VBA einfach sortieren, dass die leeren Zeilen am Ende stehen? Alternativ, wenn die ursprüngliche Reihenfolge relevant ist: Lfd. Nummer vergeben, Sortieren, Löschen ab der ersten leeren Zeile (also die Ermittlung der letzten Zeile wie Du schon verwendest auch für die Spalte lfd. Nummer) und wieder nach lfd. Nummer sortieren
ich darf an der form der Tabelle nichts ändern, aber die Idee an sich ist gut danke dafür
Vielleicht beschleunigt die Find-Methode dein Script.
Sub ZeilenLoeschen()
Dim Zelle As Range
Dim LetzteZeile As Long
LetzteZeile = UsedRange.SpecialCells(xlCellTypeLastCell).Row
Range("C7:C" & LetzteZeile).Replace what:="", Replacement:=".", lookat:=xlWhole
Set Zelle = Range("C7:C" & LetzteZeile).Find(what:=".", lookat:=xlWhole)
While Not Zelle Is Nothing
Zelle.EntireRow.Delete xlUp
Set Zelle = Range("C7:C" & LetzteZeile).Find(what:=".", lookat:=xlWhole)
Wend
End Sub
PS: Schau dir mal den Autofilter an. Evtl. brauchst du dafür kein Makro.
http://praxistipps.chip.de/excel-leere-zeilen-loeschen-so-gehts_16749
die exceldatei muss automatisch ablaufen. Und dynamisch ablaufen, weil jeden Monat andere Dateien reinkommen
Du könntest nach einem Weg suchen, das Makro automatisch einmal im Monat mitten in der Nacht zu starten. Dann würdest du dem Zeitproblem aus dem Weg gehen.
Mit geplanten Tasks ließe sich doch z. B. einiges bewerkstelligen.
ich kann bereits löschen per makro, jedoch dauert es teilweise 10 Minuten wenn jede zeile einzeln angeguckt werden muss