Thema Datum  Von Nutzer Rating
Antwort
Rot Range.Find() Performance - Datenstrukturen
18.07.2013 15:22:37 Thomas
NotSolved
18.07.2013 15:37:32 Gast46313
NotSolved
18.07.2013 15:46:04 Thomas
NotSolved
18.07.2013 16:02:08 Gast81573
*****
NotSolved
18.07.2013 16:16:59 Thomas
NotSolved
18.07.2013 16:28:05 Gast44107
NotSolved
18.07.2013 21:07:11 Thomas
NotSolved
18.07.2013 22:42:15 Gast52866
NotSolved
19.07.2013 11:59:41 Thomas
Solved

Ansicht des Beitrags:
Von:
Thomas
Datum:
18.07.2013 15:22:37
Views:
1457
Rating: Antwort:
  Ja
Thema:
Range.Find() Performance - Datenstrukturen

Guten Tag VBA Profis

 

Vorstellung: Ich arbeite zur Zeit an einer Industrie VBA Lösung. Umfang: 12 Module, 7 Formulare, 9 Worksheets. Momentan +- 6000 Zeilen Code.

Ich bin neu in der VBA Programmierung, komme aber aus dem C# und Java Advanced Umfeld.

 

Teil Aufgabe:

Gegeben sind Werte an variabler Anzahl (10-500).

Suche jeden dieser Werte in einem gegebenen Range. Wenn gefunden: Folgt Aktion je nach Position.. (unwesentlich)

 

Ansatz:

For Loop durch die gegebenen Werte, für jeden Werte currentValue mach: givenRange.Find(currentValue, LookAt:=xlWhole).

Klappt alles wunderbar. Aber es muss schneller gehen.

 

Folgende Massnahmen habe ich bereits vorgenommen:

- Von ForEach in ForEach auf Range.Find in ForEach umgestellt. (ja ich weiss, kein Kommentar ;)

- Von Range.copy() und .paste auf direkte Zuweisung umgestellt.

- Option Explicit

- Verzicht auf Select/Active Quatsch.

- Screen Update aus.

 

Mit diesen Massnahmen spare ich bereites gut 20% Zeit vom Anfangszustand. (Auf eine Liste von 700 Elementen gute 7 Sekunden)

Nach eigener Analyse ist die Laufzeitkomplexität der signifikanten Methode O(n), zuerst war es O(n^2).

Also muss ich bei den einzelnen O(1) Methoden innerhalb der Schleifen - Iteration ansetzten, die einzigen sinnvollen darin enthaltenen sind .sort() und .find()

 

Konkrete Fragen

Sind Workarounds bekannt um diese nativen Excel Funktionen zu optimieren?

Ideen zu .find(): Implementationen mit Hash Tables in Kombination mit Binärersuche, Heap Sorts etc..?

Ideen zu .sort(): Eigene QuickSort Implementierungen.

 

Ich danke für Ihre kompetenten Antworten. Beste Grüsse Thomas

 

 

 

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Range.Find() Performance - Datenstrukturen
18.07.2013 15:22:37 Thomas
NotSolved
18.07.2013 15:37:32 Gast46313
NotSolved
18.07.2013 15:46:04 Thomas
NotSolved
18.07.2013 16:02:08 Gast81573
*****
NotSolved
18.07.2013 16:16:59 Thomas
NotSolved
18.07.2013 16:28:05 Gast44107
NotSolved
18.07.2013 21:07:11 Thomas
NotSolved
18.07.2013 22:42:15 Gast52866
NotSolved
19.07.2013 11:59:41 Thomas
Solved