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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige