|  
                                             
	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 
	  
	  
	  
	  
     |