このプロジェクトの目的は、2017 年と 2018 年のグリーン エネルギー企業の株式データを分析することです。各年の 1 日あたりの総量の合計と、各ティッカー シンボルの年間収益の両方を計算します。
以下のデータからわかるように、全体として、これらのグリーン エネルギー株は、TerraForm Power (ティッカー シンボル TERP) を除いて、2018 年よりも 2017 年の方がはるかに良いパフォーマンスを示しました。
リファクタリングされたスクリプトでは、2017 年と 2018 年のサブルーチンはそれぞれ 0.55 秒と 0.57 秒で実行されました。これは、元のスクリプトの 0.64 秒と 0.67 秒に比べてわずかな改善です。スクリーンショットを以下に示します。
同じデータを生成するために使用される 2 つの方法の主な違いは、データの保存方法です。元のサブルーチンでは、以下のコードと同様に、for ループが反復されるたびにワークシート内のセルが更新されます。
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
リファクタリングされたメソッドのスクリプトは、以下のコードのように、ループ出力データを 3 つのデータ配列に保存します。これらのデータは、データ取得ループの実行後にデータでワークシートを更新するために使用されます。
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
この操作は些細なことのように思えるかもしれませんが、各サブルーチンの実行時間をおよそ 10 分の 1 秒短縮しました。
コードのリファクタリングには、状況に応じてメリットもあればデメリットもあります。いずれにせよ、元のコードに十分なコメントが付けられていなかったり、コードの目的がよく分かっていない場合は、コーディング方法や目的について十分な知識がないため、リファクタリングが非常に困難になる可能性があります。コードの。
コードに十分なコメントが付けられていない場合、各ステートメントや関数の目的を理解するのが非常に困難になる可能性があります。これにより、コードのリファクタリングが非常に困難になります。
コードの目的が馴染みのないものである場合、最終目標が何かを知らずにコードをリファクタリングすることは困難です。一般化多粒子ミー理論を使用した金属半導体ナノ粒子の電気力学シミュレーションを例に挙げます。問題がわかりましたか?コードの改造がどれほど得意であっても、この主題には電気力学と高度な偏微分方程式の両方に関する高度な知識が必要です。
さらに、コードのリファクタリングは、わずかな見返りを得るために多大な作業になる可能性があります。例として、VBA を使用した株価分析を考えてみましょう。扱っているデータセットがここで操作した桁数のままである場合、0.1 秒速く実行できるようにコードを再ツールすることは、関心のあることではないかもしれません。しかし、株式のより大きなセクターを分析する場合は、市場やヘッジファンドのパフォーマンスに応じて、コードの実行に 30 分以上かかり始めた場合、この再ツールは非常に価値がある可能性があります。
コードのリファクタリングには多くの利点もあります。一般に、コードをリファクタリングすると、コードがより洗練され、効率的になり、場合によってはさらに理解しやすくなります。
同じ目的をより少ない行数とより強力な関数で達成できるようにコードを操作できれば、コードは一般に理解しやすくなり、実行速度も速くなる可能性があります。
また、コードをリファクタリングすると、コードが本来何をするつもりであったか、そして最終目標がどのように達成されたかについて、より深く理解できるようになります。コードをリファクタリングするときは、スクリプトをもう一度見て、各ステートメントが何を行うのか、コードをより効率的にできるかどうか、またはどのようにすればよいかを判断することができます。このようにコードに関する知識が増えると、リファクタリングされたコードに対する 2 回目のコメントがより有益で説明的なものになる可能性があります。
リファクタリングされた VBA スクリプトの最も明白な利点は、実行時間です。前に述べたように、リファクタリングされたスクリプトは、元のスクリプトよりも約 10 分の 1 秒速く実行されます。
リファクタリングされたスクリプトには、より優れたコメントも含まれているため、後でコードを振り返って、元のスクリプトを理解するよりもリファクタリングされたスクリプトをはるかに理解できるようになります。
さらに、リファクタリングされたスクリプトには 1 つのサブルーチンですべてを実行するマクロが含まれていますが、元のスクリプトは複数のサブルーチンで同じタスクを実行していました。
最後に、リファクタリングされたスクリプトは、他の分析で同様のタスクを実行するために簡単に変更できるスクリプトです。データは、ループの実行中にワークシートのセルにデータを設定するのではなく、マクロ自体の配列に保存されます。元のスクリプトを別の目的で再構築する場合は、ループをほぼ完全に書き直す必要があります。リファクタリングされたスクリプトを別の目的で再ツールする場合、実際に必要なのは配列を編集し、検索と置換機能を使用してループ内の配列名を更新することだけです。