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

Zeilen Löschen

Zeilen Löschen
18.07.2013 10:02:45
alifa
Hallo,
wenn viel zu Löschen ist, gibt es da was Schnelleres?

Sub löschen() 'löscht alle Zeilen, deren Spalte X 

In Tabelle2 sind die Spalten 8-23 und 24 besetzt. Alle Zeilen, in denen der Wert in Spalte 24 kleiner als 14 ist, sollen gelöscht werden. Dabei wird die große Mehrzahl der Zeilen gelöscht. Z.B. werden laut Bedingung mehr als die ersten 300 Zeilen gelöscht. Das geht recht langsam, die Tabelle hat 1000000 Zeilen! Für 300 Zeilen werden etwa 40 Sekunden gebraucht. Vielleicht die Zwischenräume markieren und löschen?!
Gruß, Alifa

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen Löschen
18.07.2013 10:12:57
Rudi
Hallo,
Sub aaa()
Dim rngDel As Range, rngC As Range
For Each rngC In Range(Cells(1, 24), Cells(Rows.Count, 24).End(xlUp))
If rngC 

Gruß
Rudi

AW: Zeilen Löschen
18.07.2013 10:22:39
Klaus
Hallo Rudi,
ich hatte mal von dir gelernt, dass die zuweisung RANGE eine tausendstel Sekunde mehr kostet als die von CELLS.
Hier würde ich statt
Range(Cells(1, 24), Cells(Rows.Count, 24).End(xlUp))
eher diesen
Cells(1, 24).resize(Cells(Rows.Count, 24).End(xlUp),1)
nutzen, oder?
Ich wusste, dass von dir eine union()-delete Variante kommen wird! Bin echt gespannt, welche Version schneller ist.
Grüße,
Klaus M.vdT.

Anzeige
AW: Zeilen Löschen
18.07.2013 10:20:01
Klaus
Hi,
dein Code ist ja fast die langsamstmögliche Variante! Ich eröffne das Rennen mal mit diesem Script:
Sub löschen() 'löscht alle Zeilen, deren Spalte X 
Kommt bestimmt noch was schnelleres! Es wäre nett, wenn du das t-Ergebniss für mein Script auf deiner Musterdatei postest.
Grüße,
Klaus M.vdT.

verstehe ich nicht
18.07.2013 10:34:55
Rudi
Hallo,
warum sollte z.b. 1/(14-8) eine Fehler ergeben?
Alternative: "=IF(RC" & ColWert & "<14,#N/A,"""")"
Gruß
Rudi

stimmt, ich hatte "genau" 14 getestet ...
18.07.2013 10:36:35
Klaus
.. und nicht "unter 14". Wird gleich verändert und dann nochmal die Zeit gestoppt, danke für den Hinweis!
Grüße,
Klaus M.vdT.

Anzeige
stimmt, ich hatte "genau" 14 getestet ...
18.07.2013 10:40:41
Klaus
.. und nicht "unter 14". Wird gleich verändert und dann nochmal die Zeit gestoppt, danke für den Hinweis!
Neuer Code:
Sub KlausMvdT()
'25 sek
Application.ScreenUpdating = False
On Error Resume Next
Dim t!
t = Timer
Application.ScreenUpdating = False
Const ColWert As Long = 24    'Spalte X = 24 (A=1, B=2 usw)
Const MinWert As Long = 14    'alles unter 14 löschen
Dim lCol As Long
Dim lRow As Long
With Sheets("Tabelle2")
lCol = .Range("a1").SpecialCells(xlCellTypeLastCell).Column + 1
lRow = .Range("a1").SpecialCells(xlCellTypeLastCell).Row
.Cells(1, lCol).Resize(lRow, 1).FormulaR1C1 = "=1/IF(RC" & ColWert & "

läuft in unter 25 Sekunden durch.
Grüße,
Klaus M.vdT.

Anzeige
AW: Zeilen Löschen
18.07.2013 10:28:17
UweD
Hallo
von mir diese Lösung:
Sub Killen_Kleiner14()
On Error GoTo Fehler
Dim TB
Dim SP%, ZE&, LR&
Dim t
t = Timer
Set TB = Sheets("Tabelle2")
SP = 24 'Spalte X
ZE = 2 'Werte ab Zeile 2
With TB
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
LR = .Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
.Columns(SP).AutoFilter Field:=1, Criteria1:=" 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
Gruß UweD

AW: Zeilen Löschen
18.07.2013 14:30:50
alifa
Danke für die rege Teilnahme!
Da sind Lösungen, die bedeutend schneller sind, als meine!
Grüße, Alifa

Anzeige
Zwischenstand (getestet an 30.000 Zeilen)
18.07.2013 10:34:24
Klaus
Hallo zusammen,
ich hab mal 30.000 Zufallszahlen generiert und die Codes getestet (ich habe alle Codes um Screenupdating = False erweitert!)
Zwischenstand:
UweD (Autofilter): 5 Sekunden
RudiM (Union): 50 Sekunden
KlausMvdt (specialCells): 2 Sekunden
Ich meine allerdings, meine Methode geht arg in die Knie wenn im Masterblatt einige volatile Formeln vorkommen ... getestet habe ich an einem blanken Blatt mit 30.000 Einträgen in Spalte X.
Unterbietet noch jemand die bisherige Zeit?
Grüße,
Klaus M.vdT.

Korrektur:
18.07.2013 10:42:14
Klaus
Mein Ergebniss war gedopt, siehe oben.
Zwischenstand:
UweD (Autofilter): 5 Sekunden
KlausMvdt (specialCells): 25 Sekunden
RudiM (Union): 50 Sekunden
Grüße,
Klaus M.vdT.

Anzeige
Warum ist dies so schnell? verkehrte Welt ...
18.07.2013 11:11:35
Klaus
Hallo,
ich erziele mit einer leichten Modifikation von Alifas Makro erstaunlich gute Ergebnisse:
Sub Alifa() 'löscht alle Zeilen, deren Spalte X 

läuft fast so schnell wie UweD's Autofilter-Version.
Anbei mal meine Testdatei:
https://www.herber.de/bbs/user/86432.xlsm
(der Button kopiert die Zahlenreihe ins sheet "Tabelle2", dann können die Makros einzeln aufgerufen werden. Zeiten schreibe ich in die Tabelle).
Kann mir jemand erklären, warum die Alifa-Version trotz schleife und Zeilenweisem löschen so schnell ist? Und warum Rudi's Version trotz Erst-Sammeln-Dann-Löschen so relativ lange braucht? Ich versteht die Welt nicht mehr ...
Grüße,
Klaus M.vdT.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige