Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1276to1280
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

Beschleunigung einer Lösch-Schleife

Beschleunigung einer Lösch-Schleife
DominikHH
Hallo zusammen,
ich möchte in einer Tabelle alle Zeilen löschen, in denen die 39. Spalte leer ist.
Hier im Forum habe ich bereits einen passenden Code gefunden, der im Vergleich zu meinem alten _
Code einiges an Geschwindigkeit gebracht hat:

Sub Löschen()
Dim z As Long, lZ As Long
lZ = ActiveSheet.Cells(65536, 2).End(xlUp).Row
For z = lZ To 1 Step -1
With ActiveSheet
If .Cells(z, 39) = "" Then .Rows(z).Delete
End With
Next
End Sub

Da ich aber eine sehr große Anzahl von Zeilen bearbeiten muss, wäre es super, wenn es noch eine schnellere Möglichkeit gäbe, die entsprechenden Zeilen zu löschen. Kann mir dahingehend jemand weiter helfen?
Vielen Dank im Voraus und viele Grüße
Dominik

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Beschleunigung einer Lösch-Schleife
03.09.2012 13:07:18
Rudi
Hallo,
Sub Löschen()
Dim z As Long, lZ As Long, rngDel As Range
lZ = ActiveSheet.Cells(65536, 2).End(xlUp).Row
With ActiveSheet
For z = 1 To lZ
If .Cells(z, 39) = "" Then
If rngDel Is Nothing Then
Set rngDel = .Cells(z, 1)
Else
Set rngDel = Union(rngDel, .Cells(z, 1))
End If
End If
Next
End With
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
End Sub

Gruß
Rudi

AW: Beschleunigung einer Lösch-Schleife
03.09.2012 18:27:54
DominikHH
Hallo Rudi,
vielen Dank für deine schnelle Antwort. Wenn ich das Makro für ein Tabellenblatt ausführe, läuft es blitzschnell und ohne Probleme.
Wenn ich jedoch mehrere Tabellenblätter nacheinander damit abarbeiten möchte, erscheint folgende Fehlermeldung:
"Laufzeitfehler ‚1004‘
Die Methode ‚Union‘ für das Objekt ‚_Global‘ ist fehlgeschlagen"
Hast du vielleicht einen Tipp für mich, wie ich diesen Fehler umgehen kann?
Vielen Dank und viele Grüße
Dominik

Anzeige
AW: Extreme Beschleunigung des Löschvorganges
03.09.2012 23:33:44
Daniel
Hi
du musst auch, wenn du mehrere Tabellenblätter bearbeitest, vor jedem neuen Tabellenblatt die rngDel wieder leeren (Set rngDel = Nothing). Sonst versuchst du spätestens beim 2. Tabellenblatt Zellen aus verschiedenen Tabellenblättern in die gleiche Range zu packen und das funktioniert nicht (zumal du die Zeilen auf dem alten TB schon gelöscht hast).
nur mal so nebenbei, die schnelltse Methode, Zeilen mit Bedingung zu löschen, ist ab Excel 2007 folgende:
with ActiveSheet.Usedrange
With .Columns(.Columns.Count).Offset(0, 1)
.FormulaR1C1="=If(RC39="""",0,Row())"
.Cells(1,1).Value = 0
.EntireRow.RemoveDuplicates .Column, xlno
.ClearContents
End With
End With
das ist nicht nur sauschnell, sondern funktionniert auch mit beliebig grossen Datenmengen.
Gruß Daniel

Anzeige
AW: Beschleunigung einer Lösch-Schleife
03.09.2012 13:07:33
UweD
Hallo
so z.B.
Sub Makro2()
Dim TB
Set TB = ActiveSheet
With TB
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
LR = .Cells(Rows.Count, 39).End(xlUp).Row 'Letzte Spalte in Spalte AM
.Columns("AM:AM").AutoFilter
.Range("$AM$1:$AM$" & LR).AutoFilter Field:=1, Criteria1:="="
.Rows("2:" & LR).Delete Shift:=xlUp
.Columns("AM:AM").AutoFilter
End With
End Sub
Gruß UweD

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige