Der Zweck dieses Projekts ist die Analyse der Aktiendaten von Unternehmen für grüne Energie in den Jahren 2017 und 2018. Wir berechnen sowohl die Summe der täglichen Gesamtvolumina für jedes Jahr als auch die jährliche Rendite für jedes Tickersymbol.
Insgesamt schnitten diese Öko-Energie-Aktien im Jahr 2017 deutlich besser ab als im Jahr 2018, mit Ausnahme von TerraForm Power (Börsenkürzel TERP), wie Sie den folgenden Daten entnehmen können.
Die umgestalteten Skripte führten die Unterroutinen für die Jahre 2017 und 2018 in 0,55 s bzw. 0,57 s aus. Dies ist eine geringfügige Verbesserung gegenüber 0,64 s und 0,67 s für das Originalskript. Screenshots finden Sie unten.
Der Hauptunterschied zwischen den beiden Methoden zur Erzeugung derselben Daten besteht in der Datenspeichermethode. In der ursprünglichen Unterroutine werden die Zellen im Arbeitsblatt bei jeder Iteration einer for-Schleife aktualisiert, ähnlich dem folgenden Code.
For i in tickers
...
Worksheets("AllStocksAnalysis").Activate
Cells(4 + i, 1).Value = ticker
Cells(4 + i, 2).Value = totalVolume
Cells(4 + i, 3).Value = endingPrice / startingPrice - 1
...
End i
Das Skript für die umgestaltete Methode speichert die Schleifenausgabedaten in drei Datenarrays, die dann verwendet werden, um das Arbeitsblatt mit den Daten zu aktualisieren, nachdem die Datenerfassungsschleifen ausgeführt wurden, ähnlich dem folgenden Code.
Dim tickerVolumes(12) As Long
Dim tickerStartingPrices(12) As Single
Dim tickerEndingPrices(12) As Single
...
'For loops populating arrays
...
For i = 0 To 11
Worksheets("All Stocks Analysis").Activate
Cells(4 + i, 1).Value = tickers(i)
Cells(4 + i, 2).Value = tickerVolumes(i)
Cells(4 + i, 3).Value = tickerEndingPrices(i) / tickerStartingPrices(i) - 1
End i
Diese Manipulation mag trivial erscheinen, aber sie verkürzte die Laufzeit jeder Unterroutine um etwa eine Zehntelsekunde.
Das Refactoring von Code kann je nach Situation Vor- oder Nachteile haben. Wenn der ursprüngliche Code nicht ausreichend kommentiert ist oder der Zweck des Codes einem nicht genau bekannt ist, kann es auf jeden Fall sehr schwierig sein, ihn umzugestalten, da man möglicherweise nicht über ausreichende Kenntnisse der Codierungsmethoden oder des Zwecks verfügt des Codes.
Wenn der Code nicht ausreichend kommentiert ist, kann es äußerst schwierig sein, den Zweck jeder Anweisung und Funktion herauszufinden. Dies würde die Umgestaltung des Codes sehr erschweren.
Wenn der Zweck des Codes unbekannt ist, ist es schwierig, den Code umzugestalten, ohne das Endziel zu kennen. Nehmen Sie als Beispiel elektrodynamische Simulationen von Metall-Halbleiter-Nanopartikeln unter Verwendung der verallgemeinerten Multipartikel-Mie-Theorie. Sehen Sie das Problem? Unabhängig davon, wie gut jemand im Umrüsten von Code sein mag, erfordert dieses Fach fortgeschrittene Kenntnisse sowohl der Elektrodynamik als auch fortgeschrittener partieller Differentialgleichungen.
Darüber hinaus könnte das Refactoring von Code am Ende eine Menge Arbeit bedeuten, die sich jedoch ein wenig auszahlt. Nehmen Sie als Beispiel unsere Aktienanalyse mit VBA. Wenn die Datensätze, mit denen man arbeitet, in der Größenordnung bleiben, die wir hier manipuliert haben, ist es möglicherweise nicht von Interesse, den Code so umzurüsten, dass er 0,1 s schneller läuft. Wenn wir jedoch größere Sektoren des Bestands analysieren würden Aufgrund der Markt- oder Hedgefonds-Performance kann diese Umrüstung äußerst wertvoll sein, wenn die Ausführung des Codes 30 Minuten oder länger dauert.
Das Refactoring von Code hat auch viele Vorteile. Im Allgemeinen wird der Code durch das Refactoring oft eleganter, effizienter und manchmal sogar verständlicher.
Wenn man den Code so manipulieren kann, dass das gleiche Ziel mit weniger Zeilen und leistungsfähigeren Funktionen erreicht wird, ist der Code im Allgemeinen leichter zu verstehen und wird wahrscheinlich auch schneller ausgeführt.
Außerdem erhält man durch das Refactoring von Code ein tieferes Verständnis dafür, wozu der Code ursprünglich gedacht war und wie das Endziel erreicht wurde. Beim Refactoring von Code kann man einen zweiten Blick auf ein Skript werfen und entscheiden, was jede Anweisung bewirkt und ob und wie der Code effizienter gestaltet werden kann. Dieser Zuwachs an Kenntnissen über den Code wird wahrscheinlich dazu führen, dass die Kommentare zum überarbeiteten Code beim zweiten Mal nützlicher und aussagekräftiger sein werden.
Der offensichtlichste Vorteil unseres überarbeiteten VBA-Skripts ist die Laufzeit. Wie bereits erwähnt, läuft das überarbeitete Skript etwa eine Zehntelsekunde schneller als das ursprüngliche Skript.
Unser umgestaltetes Skript enthält auch viel bessere Kommentare, sodass wir später auf den Code zurückblicken und das umgestaltete Skript viel besser verstehen können, als wir vielleicht das ursprüngliche Skript verstehen.
Darüber hinaus enthält unser überarbeitetes Skript ein Makro, das alles mit einer Unterroutine erledigt, während das ursprüngliche Skript dieselben Aufgaben mit mehreren Unterroutinen erledigte.
Schließlich ist das überarbeitete Skript eines, das leichter geändert werden kann, um ähnliche Aufgaben für andere Analysen auszuführen. Die Daten werden in Arrays in den Makros selbst gespeichert, anstatt Zellen in den Arbeitsblättern zu füllen, während die Schleifen ausgeführt werden. Würden wir das ursprüngliche Skript für einen anderen Zweck umrüsten, müssten wir die Schleifen fast komplett neu schreiben. Wenn wir das überarbeitete Skript für einen anderen Zweck umrüsten würden, müssten wir eigentlich nur die Arrays bearbeiten und die Such- und Ersetzungsfunktion verwenden, um die Array-Namen in den Schleifen zu aktualisieren.