1.1k Aufrufe
Gefragt in Tabellenkalkulation von finger59 Experte (1.3k Punkte)
Hallo liebe Excel-Fangemeinde,

ich habe hier eine Datei mit ca. 25.000 Zeilen in der ich in der Spalte A eine Formel hinterlegt habe, wenn eine Bedingung zutrifft, dass dort ein x eingetragen wird.

Nun möchte ich anschließend alle Zeilen komplett löschen, die das x in Spalte A haben.

Dazu habe ich im Internet folgende Formel gefunden, die auch an sich funktioniert, aber tierisch lange durchläuft. Daher wollte ich mal anfragen, ob von Euch jemand eine andere Lösung zum Löschen hat, die schneller durchläuft.... Ansonsten könnte ich wohl zwischendurch einkaufen fahren ;-)....

Hier das bisherige Makro:

Dim loeschen As Double
For loeschen = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(loeschen, 1).Value = "x" Then
Rows(loeschen).Delete
End If
Next loeschen


Vielen Dank allen Interessierten und ein schönes WE... LG Helmut

5 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Helmut,

folgender Code benötigt bei mit 10 sec für 25000 Zeilen

Option Explicit

Sub loeschen()
Dim lngi As Long
Application.ScreenUpdating = False
For lngi = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(lngi, 1).Value = "x" Then
Rows(lngi).Delete
End If
Next
Application.ScreenUpdating = True
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

noch eine variante
spale 1 bzw a wird das x gefiltert

gruss nighty

Sub XLöschen_SpA()
ActiveSheet.Cells(1, 1).AutoFilter Field:=1, Criteria1:="x"
ActiveSheet.Rows("2:" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row).Delete Shift:=xlUp
ActiveSheet.Cells(1, 1).AutoFilter
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

oder auch so

gruss nighty

Sub Lösch()
ActiveSheet.Columns(1).Replace What:="x", replacement:=True, lookat:=xlWhole
ActiveSheet.Columns(1).SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete
End Sub
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hallo Rainer,
hallo nighty,

zunächst einmal vielen Dank für eure Makros zum Löschen von Zeilen und es gab in diesem Fall einen eindeutigen Zeitvorsprung bei dem Makro 2 von nighty.

Ich vermute mal, da ich nicht das komplette Makro angezeigt hatte, dass es dort etwas gibt, was die
Geschwindigkeit des Löschens in Rainers und in meinem vorher benutzen Makro beeinträchtigt, obwohl ich so keine offene Schleife oder ähnliches sehe...

Rainers Makro war zwar schneller wie das von mir genutzte, aber es hätte bestimmt auch so um die 10 Minunten gebraucht. Wie gesagt - ich vermute das etwas anderes vorher reinspielt.

Ich danke Euch beiden für Eure Unterstützung und würde in diesem Fall den Bonus an nighty geben, da
hier das Löschen sofort passiert.

In diesem Sinne... Euch und allen anderen Interessierten ein schönes Wochenende... Vielen vielen Dank...
Lg Helmut
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Helmut und all ^^

folgendes bremst einiges aus
'Double ersetzen durch integer bzw Long
Dim loeschen As Double
'die letzte zeile vor der for next schleife erfassen und die variable uebergeben
For loeschen = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
'es erfolgt der erste cell zugriffe pro durchlauf(mit auslöseeffekt auf ereignisse)
If Cells(loeschen, 1).Value = "x" Then
'es erfolgt der zweite cell zugriffe pro gefundenes x (mit auslöseeffekt auf ereignisse)
Rows(loeschen).Delete
End If
Next loeschen


verbleiben 1 oder 2(bei x fund) cell zugriffe pro durchlauf

Definierung der variablen und dessen speicherbedarf
Integer = 2 Byte
Long = 4 Byte
Double = 8 Byte
mit steigender berechnungszeit

gruss nighty
...