Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1336to1340
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeile löschen beschleunigen

Zeile löschen beschleunigen
31.10.2013 12:04:06
Gregor
Hallo zusammen
Musterdatei auf
https://www.herber.de/bbs/user/87891.xlsx
Ich lösche folgende Zeilen auf der Musterdatei mit folgendem Code
Sub Zeilen_löschen()
With Worksheets("Muster")
intLastRow = .Cells(Rows.Count, 6).End(xlUp).Row
For Start = intLastRow To 5 Step -1
LeereZelle = Cells(Start, 6).End(xlUp).Row
LastRow = Cells(LeereZelle, 1).End(xlDown).Row - 2
Start = LeereZelle
Rows(LeereZelle - 1 & ":" & LastRow).Delete
Next
End With
End Sub
Bei vielen Zeilen und bei mehrmaligem Auslösen läuft der Code langsam. Wie kann ich das beschleunigen? Zum Beispielindem ich erst am Ende des Loops alle Zeilen zusammen lösche.
Vielen Dank und Gruss
Gregor

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile löschen beschleunigen
31.10.2013 12:43:45
KlausF
Hallo Gregor,
Sub Zeilen_löschen()
Dim intLastRow As Long
Dim Start As Long
Dim LeereZelle As Long
Dim LastRow As Long
Application.ScreenUpdating = False
With Worksheets("Muster")
intLastRow = .Cells(Rows.Count, 6).End(xlUp).Row
For Start = intLastRow To 5 Step -1
LeereZelle = .Cells(Start, 6).End(xlUp).Row
LastRow = .Cells(LeereZelle, 1).End(xlDown).Row - 2
Start = LeereZelle
.Rows(LeereZelle - 1 & ":" & LastRow).Delete
Next
End With
Application.ScreenUpdating = True
End Sub
Gruß
Klaus

AW: Zeile löschen beschleunigen
31.10.2013 12:47:50
Bastian
Hallo Gregor,
ist es so gewollt, dass Du bei jedem Schleifendurchlauf zwei Zeilen löschst? Die mit leerer Zelle in Spalte 6 und die darunter?
Gruß, Bastian

Anzeige
AW: Zeile löschen beschleunigen
31.10.2013 13:51:48
Gregor
Hallo zusammen
Ja, das ist gewollt, das heisst, wenn leere Zelle Spalte 6, dann diese Zejile und die folgenden Zeilen bis Eintrag in Spalte Spalte 1. Usw.
Also nicht einfach Zeilen, wenn Zelle Spalte 6 leer.
Application.ScreenUpdating = False bringt nicht die gewünschte Beschleunigung
Ich habe mir vorgestellt, die eruierten Zeilen in einem Array zu speichern und am Schluss auf einmal zu löschen, aber ich weiss nicht ob und wie das geht.
Danke und Gruss
Gregor

AW: Zeile löschen beschleunigen
31.10.2013 14:51:48
KlausF
Hallo Gregor,
mein Makro läuft bei mir (auf dem Mac) ca. 1 Sekunde.
Ist Dir das zu langsam?
Gruß
Klaus

Anzeige
AW: Zeile löschen beschleunigen
31.10.2013 14:53:20
GuentherH
Hallo Gregor,
würde es in Frage kommen, die gewünschten Zeilen in ein neues Blatt zu kopieren, und danach das alte Blatt komplett zu löschen?
Gruß,
Günther

AW: Zeile löschen beschleunigen
31.10.2013 12:46:08
Rudi
Hallo,
willst du die leeren Zeilen löschen?
Sub loeschen()
With Range(Cells(1, 6), Cells(Rows.Count, 6).End(xlUp)).Offset(, 1)
.FormulaR1C1 = "=IF(COUNTA(RC[-6]:RC[-1]),"""",#N/A)"
.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
.Clear
End With
End Sub
Gruß
Rudi

AW: Zeile löschen beschleunigen
31.10.2013 12:46:13
Tino
Hallo,
kannst mal diesen Code testen.
Der Code sortiert erst nach Daten wo in A was steht und löscht dann
die Zeilen die einen Wahrheitswert (wo in A nix steht) als Ergebnis haben.
Damit sind diese Daten an einem Block und sollte dadurch schneller gehen.
Sub Zeilen_löschen()
Dim rng As Range, iCalc%
With Application
    iCalc = .Calculation
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
    
    With Sheets("Muster")
        Set rng = .Range("A5", .Cells(.UsedRange.Rows(.UsedRange.Rows.Count).Row, 1))
        If rng.Rows(1).Row > 4 Then 'Daten ab Zeile 5? 
            Set rng = rng.Resize(, .UsedRange.Columns(.UsedRange.Columns.Count).Column + 1)
            With rng
                .Columns(.Columns.Count).FormulaR1C1 = "=IF(RC1<>"""",ROW(),TRUE)"
                .Sort Key1:=.Cells(1, .Columns.Count), Order1:=xlAscending, Header:=xlNo
                On Error Resume Next
                .Columns(.Columns.Count).SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
                .Columns(.Columns.Count).EntireColumn.Delete
            End With
        End If
    End With
    
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = iCalc
End With
End Sub
Gruß Tino

Anzeige
AW: Zeile löschen beschleunigen
31.10.2013 12:46:41
GuentherH
Hallo Gregor,
der erste Schritt wäre
Application.screenupdate=false
Gruß,
Günther

AW: Zeile löschen beschleunigen mit Dupl. Entf.
01.11.2013 11:06:08
daniel
Hi
die momentan schnellste Methode um in Excel viele Zeilen zu löschen ist folgende:
1. schreibe in eine Hilfsspalte eine Formel die für alle Zeilen, die gelöscht werden sollen als Ergebnis 0 hat und für alle die stehenbleiben sollen, die aktuelle Zeilennummer (Zeile())
2. schreibe in die erste Zeile der Hilffspalte (Überschrift) ebenfalls die 0
3. wende auf die ganze Tabelle die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an, mit der Hilfsspalte als Kriteriumsspalte und der Option "keine Überschrift"
4. lösche die Hilfsspalte wieder.
das ist momentan die schnellste Methode in Excel um Zeilen zu löschen ohne die Sortierung zu verändern.
außerdem ist sie sauschnell und funktioniert auch mit grössten Zeilenmengen problemlos.
der entsprechende VBA-Befehl heißt REMOVEDUPLICATES.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige