Thema Datum  Von Nutzer Rating
Antwort
27.10.2011 18:40:55 Stefan
*****
Solved
28.10.2011 01:25:29 Till
NotSolved
28.10.2011 01:29:24 Till
NotSolved
28.10.2011 20:31:30 Stefan
NotSolved
Rot VBA-Code optimieren?
29.10.2011 02:26:18 Till
NotSolved
29.10.2011 13:03:26 Till
NotSolved
31.10.2011 13:34:16 Stefan
NotSolved
31.10.2011 13:43:39 Stefan
NotSolved
31.10.2011 15:13:48 Stefan
NotSolved
31.10.2011 21:04:38 Till
NotSolved

Ansicht des Beitrags:
Von:
Till
Datum:
29.10.2011 02:26:18
Views:
931
Rating: Antwort:
  Ja
Thema:
VBA-Code optimieren?

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.


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
27.10.2011 18:40:55 Stefan
*****
Solved
28.10.2011 01:25:29 Till
NotSolved
28.10.2011 01:29:24 Till
NotSolved
28.10.2011 20:31:30 Stefan
NotSolved
Rot VBA-Code optimieren?
29.10.2011 02:26:18 Till
NotSolved
29.10.2011 13:03:26 Till
NotSolved
31.10.2011 13:34:16 Stefan
NotSolved
31.10.2011 13:43:39 Stefan
NotSolved
31.10.2011 15:13:48 Stefan
NotSolved
31.10.2011 21:04:38 Till
NotSolved