Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Leere Zeilen schneller löschen

Leere Zeilen schneller löschen
12.09.2018 17:13:43
Lutz
Hallo liebe Excel-Experten,
ich habe ein Makro welches leere Zeilen löscht:
Sub del_row()
Dim i As Variant, Alle As Variant
Application.ScreenUpdating = False
Alle = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
For i = Alle To 1 Step -1
Do While Application.CountA(Rows(i)) = False
Rows(i).EntireRow.Delete
Loop
Next i
End Sub

Das funktioniert auch ganz gut aber bei grossen Datenmengen ist es sehr langsam - und das überproportional:
Bei 10.000 Datensätzen ca. 20 Sekunden
Bei 100.000 Datensätzen dann mehr als 5 Minuten
Da stimmt das Verhältnis ja auch nicht?
Hat jemand eine Idee wie man das Makro beschleunigen könnte?
Vielen Dank und viele Grüße Lutz

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leere Zeilen schneller löschen
12.09.2018 18:12:49
Gerd
Moin Lutz!
Sub Leere_Zeilen_loeschen()
Dim X As Range
With ActiveSheet.UsedRange
Set X = .Columns(.Columns.Count - .Column + 2)
End With
X.Cells.FormulaR1C1 = "=IF(COUNTA(RC1:RC[-1])=0,0,ROW())"
X.Cells(1) = 0
ActiveSheet.UsedRange.RemoveDuplicates X.Column, xlNo
X.Clear
Set X = Nothing
End Sub

Gruß Gerd
AW: Leere Zeilen schneller löschen
12.09.2018 18:57:12
Lutz
Moin Moin Gerd - ich bin beeindruckt: mein Makro ca. 212 Sekunden - Deines 13 Sekunden!!
Vielen lieben Dank!
Ich muss allerdings gestehen, dass ich nicht ganz verstehe was da abläuft:(
Aber es ist rasend schnell - hätte ich nie gedacht weil da eine Formel drin steht.
Respekt und vielen lieben Dank
Viele Grüße Lutz
Anzeige
AW: RemoveDup
12.09.2018 18:14:06
Fennek
Hallo,
teste mal diesen Code:

Sub F_en()
Dim WS As Worksheet: Set WS = ActiveSheet
Set lc = WS.Cells.SpecialCells(xlCellTypeLastCell)
For i = 1 To lc.Row
If Application.CountA(Rows(i)) = 0 Then
Z = 0
Else
Z = i
End If
Cells(i, lc.Column + 1) = Z
Next i
WS.UsedRange.RemoveDuplicates lc.Column, xlNo
Columns(lc.Column + 1).Clear
End Sub
mfg
(die Idee ist von Daniel)
AW: RemoveDup
12.09.2018 19:00:34
Lutz
Hallo Fennek
Vielen lieben Dank für Deine Mühe.
Das Ding ist superschnell - 11 Sekunden bei 57.000 Datensätzen aber er löscht leider bis auf eine Zeile alles weg:(
Das sind reine Daten und da sind dann immer mal 2 Zeilen gefüllt und eine nicht, dann wieder 3 gefüllt und eine nicht... Vielleicht erkenn der die usedrange nicht mehr?
Das Makro von Gerd funktioniert etwas gleich schnell aber es lässt die gleiche Zeilenanzahl wie meines stehen.
Viele Grüße Lutz
Anzeige
AW: Beispiel
12.09.2018 19:33:25
Fennek
lade bitte eine Beispieldatei mit 10-20 Zeilen hoch
AW: Leere Zeilen schneller löschen
12.09.2018 18:17:37
Werner
Hallo Lutz,
weshalb ermittelst du so
Alle = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

die letzte belegte Zeile? Hast du Formeln in Spalte A die ein "" ausgeben?
Ich würde da zu einer Formel in der ersten freien Spalte tendieren, die eine 0 ausgibt wenn in der gleichen Zeile in Spalte A leer, ansonsten die Zeilennummer. Und dann Duplikate entfernen auf den Datenbereich mit der zusätzlichen Spalte as Kriteriumsspalte.
Mach mal eine Beispielmappe und lade diese hier hoch. Aber bitte nix mit Makros, kann ich nicht herunterladen.
Gruß Werner
Anzeige
AW: Leere Zeilen schneller löschen
12.09.2018 19:04:37
Lutz
Hallo Werner,
ich habe das Makro mal irgendwo gesehen und etwas angepasst... Bei kleinen Datenmengen bis 10.000 Zeilen reicht das völlig.
Das ist eine Tabelle die ich immer downloade und dann per Autofilter die Werte selektiere die ich nicht brauche (leider kein Selektionsfähiges Feld im ERP-System). Die lösche ich dann nach dem Filtern und die Zeilen bleiben eben ganz leer.
Sind nur Werte.
Ich denke das Makro von Gerd ist ja superschnell...
Vielen lieben Dank für deine Mühe und noch einen schönen Abend
Viele Grüße Lutz
AW: Leere Zeilen schneller löschen
12.09.2018 19:10:44
Werner
Hallo Lutz,
na ja, das Makro von Gerd ist genau das, was ich beschrieben habe,
Gruß Werner
Anzeige
AW: UsedRange muss in "A" beginnen!
12.09.2018 20:47:32
Piet
Hallo
mich haben die Makros interessiert, denke das Werner seine Lösung sicher genauso gut ist!
Hinweis:
Das Makro von Gerd funktioniert Suoper wenn der UsedRange mit Spalte A beginnt!
Sonst gibt es Chaos! Wird die Formel in eine - Spalte mit Daten geschrieben.
Fiel mir nur auf weil ich beim Testen Wert ab Spalt C eingetragen haette!
mfg Piet
AW: Erhöhe um mind. zwei Spalten
12.09.2018 22:25:31
Gerd
Hallo Piet,
sicher ist, dass nichts sicher ist. :-)
Sub Leere_Zeilen_loeschen_2()
Dim X As Range
With ActiveSheet.UsedRange
Set X = .Columns(.Columns.Count + .Column)
End With
X.Cells.FormulaR1C1 = "=IF(COUNTA(RC1:RC[-1])=0,0,ROW())"
X.Cells(1) = 0
ActiveSheet.UsedRange.RemoveDuplicates X.Column, xlNo
X.Clear
Set X = Nothing
End Sub

Gruß Gerd
Anzeige

331 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige