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

Code beschleunigen!?

Forumthread: Code beschleunigen!?

Code beschleunigen!?
25.01.2018 15:58:48
Alex
Hallo!
Folgender Code dauert ewig:

For i = letzteZeileLöschen To letzteReihe + 1 Step -1
Set objCell = Tabelle2.Columns(17).Find(What:="ID/" & Tabelle14.Cells(i, 1).Value, After:=Tabelle2.Cells(1, 17), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
If Not objCell Is Nothing Then
Tabelle14.Rows(i).Delete
End If
Next i

Habt ihr Vorschläge, wie das schneller gehen könnte? Die Schleife läuft durch dirca 900 Werte. Daher wird das wohl so lange dauern, oder? Da die Schleife des öfteren im Makro vorkommt, summiert sich die Wartezeit auch noch erheblich.
VG, Alex
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code beschleunigen!?
25.01.2018 16:32:32
Daniel
Hi
schnelles löschen von Zeilen mit Bedingung geht am besten mit einer Formel in einer Hilfsspalte, welche alle Zeilen mit 0 kennzeichnet, die gelöscht werden sollen und die anderen mit der aktuellen Zeilennummer.
Dann kommt noch die 0 in die Überschriftenzeile der Hilfsspalte und man wendet auf das ganze die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an.
With Tabelle14
With .Range(.Cells(letzteReihe - 1, 99), .Cells(letzteZeilelöschen, 99))
.FormulaR1C1 = "=IF(CountIf('" & Tabelle2.Name & "'!C17,""ID/""&RC1)=0,0,Row())"
.cells(1, 1).Value = 0
.entireRow.RemoveDuplicats .Column, xlno
.Clearcontents
End With
end with
anstelle der 99 solltest du die Spaltnnummer der ersten freien Spalte am Ende von Tabelle14 einsetzen.
Wenn in Tabelle2 sehr viele Daten stehen, könnte auch das CountIf eine Bremse sein.
Dann müsste man die Tabelle2 Spalte 17 aufsteigend sortieren und mit dem SVERWEIS und 4. Parameter = WAHR überprüfen, ob die Werte vorhanden sind.
Gruß Daniel
PS: Code ist jetzt nicht auf Rechtschreibfehler getestet, diese bitte selber bereinigen
Anzeige
AW: Code beschleunigen!?
25.01.2018 18:01:15
Alex
Sehr cool! Vielen Dank für den Rat! Läuft perfekt!
Habe minimal abgeändert, da ich den umgekehrten Fall brauche:
.FormulaR1C1 = "=IF(CountIf('" & Tabelle2.Name & "'!C17,""ID/""&RC1)=0,0,Row())"
VG, Alex
AW: Code beschleunigen!?
25.01.2018 19:00:33
Daniel
wie gesagt, das Prinzip ist geeignet für fast alle "lösche Zeilen mit Bedingung"-Aufgaben und bietet deutlich mehr Möglichkeiten als bswp der Autofilter.
Lediglich die Formel muss an die neue Aufgabenstellung angepasst werden, der Rest vom Code ist immer gleich.
Aber die Formel kann man ja auch erstmal direkt in der Zelle erstellen und erst am Schluss den Formeltext in den Code übernehmen.
Gruß Daniel
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige