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

Laufzeit

Laufzeit
24.04.2015 12:12:08
MAS
Hallo werte Forumsmitglieder,
ich habe eine Tabelle mit rund 8.000 Werten in Spalte A
Diese Spalte durchlaufe ich mit einer FOR-NEXT Schleife.
Den Wert aus jeder Zeile übernehme ich in die Variable strWasSuchen
Anschließend setze ich mir einen Range auf eine Spalte in einem anderen Tabellenblatt und suche dort nach dem Wert meiner Variablen.
Dieser Range hat rund 30.000 Zeilen
Set rngWo = Worksheets(shBlatt).Range(colSucheIn & ":" & colSucheIn).Find(strWasSuchen, LookIn:=xlValues, Lookat:= _
xlPart)
Wenn ich dann was gefunden hole ich mir in der gleichen Zeile aus einer anderen Spalte einen Wert zurück.
If Not rngWo Is Nothing Then
result = Worksheets(shBlatt).Range(colResult & rngWo.Row).Value
Worksheets(shExport).Cells(i, colSOURCE).Value = result
End If
Die Laufzeit des Makros, um zu allen 8.000 Einträgen den zugehörigen Wert zu ermitteln beträgt rund 10 Minuten.
Ist das normal? oder hat jemand einen Tipp, ob man durch anderes Coding die Laufzeit evtl. verbessern könnte.
Vielen Dank schon mal im Voraus für eure Tipps
mas

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeit
24.04.2015 12:17:20
Nepumuk
Hallo,
die Find-Methode ist nicht die schnellste. Serielles Suchen in einem Array ist meistens schneller. Also erst mal alle Suchbegriffe in ein Array schreiben, dann alle zu durchsuchenden in ein zweites und diese in verschachtelten Schleifen abklappern.
Gruß
Nepumuk

AW: Laufzeit
26.04.2015 18:06:57
MAS
Hallo Nepomuk,
der Tipp mit dem Array war es - die Laufzeit ist jetzt drastisch geringer.
mas

AW: Laufzeit
24.04.2015 12:27:25
Daniel
Hi
du könntest anstatt des Makros die Funktion SVErweis verwenden (oder die Kombination aus Index und Vergleich, wenn die Ergebnisspalte links der Suchspalte liegt).
das hätte schon mal den Vorteil, dass du die Formel in alle Zellen gleichzeitig schreiben kannst und nicht jede der 8000 Zeilen einzeln befüllen musst.
der nächste Beschleunigungsschritt wäre, dass du die Tabelle in der du suchst nach der Suchspalte aufsteigend sortierst und dann mit dem SVerweis mit 4. Parameter = WAHR arbeitest.
Aufgrund der Sortierung wird dann eine wesentlich schneller Suchmethode verwendet als bei .Find oder dem SVerweis mit 4. Parameter = FALSCH
Bei der genannten Datenmenge sollte die Bearbeitungszeit dann im Sekundenbereich liegen.
das Problem mit nicht vorhandenen Suchwerten löst man so:
=Wenn(SVerweis(Suchwert;SuchMatrix;1;wahr)=SuchWert;SVerweis(Suchwert;SuchMatrix;Ergebnisspalte,Wahr) ;"") 

dh man wendet erstmal den Verweis mit der Suchspalte = Ergebnisspalte an und vergleicht Rückgabewert mit Suchwert. Sind beide gleich, ist der Suchwert in der Liste vohanden.
zur Geschwindigkeit:
die Datenmenge ist N = 2^x, bei dir 30.000 = 2^15
in der unsortierten Liste ist die durchschnittliche Suchzeit proportional N/2 (15.000)
in der sortierten Liste ist die Suchzeit proportional x (15).
Gruß Daniel

Anzeige
AW: Laufzeit
26.04.2015 18:09:12
MAS
Hallo Daniel,
danke für den Hinweis.
Aus diversen Gründen will / muss ich ohne Formel in der Tabelle arbeiten und mache alles über Makros.
mas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige