Technisch ist dein Code schon recht gut. Am Wichtigsten ist es eigentlich die Anzahl der Zugriffe auf die Excel Objekte zu minimieren. Also möglichst nicht einzelnt Daten in Zellen schreiben sondern in Arrays und dann das Ganze per VBA Funktion in das Tabellenblatt kopieren.
Ebenso sollte man nicht während eine Schleife läuft Zelldaten auslesen sondern den relevanten Bereich erst in ein Array kopieren, das geht per VBA Funktion am schnellsten und nur mittels Variant-Array, welches genau so dimensioniert ist wie die kopierte Range. Um Daten in Array schreiben zu können muss man das Array entweder dynamisch dimensionieren (redim preserve) oder die Anzahl der Daten, die gefunden werden in etwa kennen. Redim preserve ist allerdings wieder relativ langsam und funktioniert nur mit der letzten Dimension eines Arrays, wenn du das Maximum kennst, kannst du das Array zunächst größer dimensionieren und danach verkleinern.
Wenn technisch alles optimal ist, kannst du versuchen deinen Code auf das Problem bezogen intelligenter zu gestalten. Z.B in dem du nicht alle Daten durchsuchst, sondern nur die im Moment relevanten, oder deine Daten in einer sinnvollen Weise sortierst und strukturierst, die es dem Programm ermöglicht unnötige Bereiche zu überspringen...
Was das Set A=Application angeht... Objekt Variablen und With Anweisung tragen in VBA eigentlich immer positiv zur Performance bei wenn die Variable danach mehrmals verwendet wird. In diesem Fall habe ich allerdings nur A als Objektvariable benutzt, um mir Schreibarbeit zu sparen und den Code kürzer zu machen. Auf die Performance dürfte sich das kaum auswirken...
Was Bücher angeht, kann ich dir nichts empfehlen, da ich selber nie ein VBA-Buch gelsen habe. Könntest dir allerdings mal ein paar Tutorials/Bücher, die sich mir der Einbindung von (C++) .dlls beschäftigen. Wenn du da die rechenintensiven Funktionen auslagern kannst sollte das dein Programm nochmals um einiges schneller machen. Dabei wirst du aber wohl mir eindimensionalen Arrays arbeiten müssen.
Ach ja, ist es wichtig deine Daten in eine .xls zu schreiben? Dürfte deutlich schneller gehen wenn du sie in ein Textfile (z.B. als CSV) schreibst, ohne den Umweg über Excel Arbeitsblätter zu gehen.
|