본 프로젝트의 목적은 2017년과 2018년 그린에너지 기업의 주식 데이터를 분석하는 것입니다. 각 연도의 일일 총거래량의 합과 종목코드별 연간 수익률을 모두 계산합니다.
전반적으로 이러한 녹색 에너지 주식은 아래 데이터에서 볼 수 있듯이 TerraForm Power(티커 기호 TERP)를 제외하고 2018년보다 2017년에 훨씬 더 나은 성과를 거두었습니다.
리팩터링된 스크립은 2017년과 2018년에 각각 0.55초와 0.57초 만에 서브루틴을 실행했습니다. 이는 원본 스크립트의 0.64초 및 0.67초에 비해 약간 개선된 수치입니다. 스크린샷은 아래에 제공됩니다.
동일한 데이터를 생성하는 데 사용되는 두 가지 방법의 주요 차이점은 데이터 저장 방법입니다. 원래 서브루틴에서 워크시트의 셀은 아래 코드와 유사하게 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
리팩터링된 방법의 스크립트는 루프 출력 데이터를 세 개의 데이터 배열에 저장합니다. 이 데이터 배열은 아래 코드와 유사하게 데이터 수집 루프가 실행된 후 데이터로 워크시트를 업데이트하는 데 사용됩니다.
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초 정도 단축했습니다.
리팩토링 코드는 상황에 따라 장점과 단점이 있을 수 있습니다. 어쨌든 원본 코드에 대한 코멘트가 충분하지 않거나 코드의 목적이 익숙하지 않은 코드라면 코딩 방법이나 목적에 대한 충분한 지식이 없기 때문에 리팩토링이 매우 어려울 수 있습니다. 코드의.
코드에 주석이 충분하지 않으면 각 명령문과 함수의 목적을 파악하기가 매우 어려울 수 있습니다. 이로 인해 코드를 리팩토링하기가 매우 어려워집니다.
코드의 목적이 익숙하지 않은 경우 최종 목표가 무엇인지 모르고 코드를 리팩토링하기가 어렵습니다. Generalized Multiparticle Mie 이론을 사용하여 금속 반도체 나노입자의 전기역학적 시뮬레이션을 예로 들어 보겠습니다. 문제가 보이나요? 코드를 아무리 잘 수정하더라도 이 주제에는 전기역학과 고급 편미분 방정식에 대한 고급 지식이 필요합니다.
게다가 리팩토링 코드는 약간의 보상을 위해 많은 작업이 될 수 있습니다. VBA를 사용한 주식 분석을 예로 들어 보겠습니다. 작업 중인 데이터 세트가 여기서 조작한 규모로 유지된다면 0.1초 더 빠르게 실행되도록 코드를 재구성하는 것은 관심 있는 것이 아닐 수 있습니다. 그러나 주식의 더 큰 부문을 분석한다면 시장 또는 헤지 펀드 성과와 관련하여 코드를 실행하는 데 30분 이상 걸리기 시작할 때 이러한 재조정은 매우 유용할 수 있습니다.
리팩토링 코드에는 많은 장점도 있습니다. 일반적으로 코드를 리팩토링하면 코드가 더 우아하고 효율적이며 때로는 이해하기가 더욱 쉬워집니다.
더 적은 수의 라인과 더 강력한 기능으로 동일한 목표를 달성하도록 코드를 조작할 수 있다면 코드는 일반적으로 이해하기 쉽고 더 빠르게 실행될 것입니다.
또한 코드를 리팩토링하면 코드가 원래 의도한 바가 무엇인지, 최종 목표가 어떻게 달성되었는지 더 깊이 이해할 수 있습니다. 코드를 리팩터링할 때 스크립트를 다시 살펴보고 각 문이 수행하는 작업과 코드를 더 효율적으로 만들 수 있는지 여부 또는 방법을 결정하게 됩니다. 코드에 대한 지식의 증가는 리팩토링된 코드에 대한 주석이 두 번째로 더 유용하고 설명적이라는 것을 의미할 것입니다.
리팩터링된 VBA 스크립트의 가장 확실한 이점은 런타임입니다. 앞서 설명한 대로 리팩터링된 스크립트는 원본 스크립트보다 약 10분의 1초 더 빠르게 실행됩니다.
리팩터링된 스크립트에는 훨씬 더 나은 주석이 포함되어 있으므로 나중에 코드를 다시 살펴보고 원래 스크립트를 이해하는 것보다 리팩터링된 스크립트를 훨씬 더 잘 이해할 수 있습니다.
또한 리팩토링된 스크립트에는 하나의 서브루틴으로 모든 작업을 수행하는 매크로가 포함되어 있는 반면, 원래 스크립트는 여러 서브루틴을 사용하여 동일한 작업을 수행했습니다.
마지막으로, 리팩터링된 스크립트는 다른 분석을 위해 유사한 작업을 수행하기 위해 더 쉽게 수정할 수 있는 스크립트입니다. 루프가 실행되는 동안 데이터는 워크시트의 셀을 채우는 대신 매크로 자체의 배열에 저장됩니다. 다른 목적으로 원본 스크립트를 다시 작성하려면 루프를 거의 완전히 다시 작성해야 합니다. 다른 목적을 위해 리팩터링된 스크립트를 재구성하려면 배열을 편집하고 검색 및 바꾸기 기능을 사용하여 루프에서 배열 이름을 업데이트하기만 하면 됩니다.