안녕하세요. 춤추는초코칩입니다. 매크로를 개발하게 되면, 실행시간이 얼마인지? 속도가 얼마나 개선되는지? 이전 매크로에 비해 얼마나 빨라지는지 궁금합니다. 그래서, 오늘은 매크로의 속도를 측정하는 방법에 대해 알아보겠습니다.

1. Timer 함수
매크로의 속도를 측정하기 위해서는 Timer라는 함수를 알아야 합니다.
Timer함수는 자정 이후 경과한 시간(초)을 나타내는 Single 타입의 함수입니다. Timer함수는 초의 소수 부분을 표시할 수 있습니다.
Sub testMacro()
MsgBox Timer
End Sub

Timer 함수를 실행해서 얻은 값이 16920.21입니다. 초를 나타내는 함수이므로 분, 시간단위로 환산하면 4.7시간이 나옵니다. 현재 포스팅 작성시간은 새벽 4시 42분이네요. ㅠ.ㅠ
약 4.7 = 16920.21 / 60 / 60
현재 시간을 나타내는 Time과는 다른 함수입니다. Time함수는 0:00:00부터 23:59:59 사이의 시간을 나타내므로 1초 미만의 계산에서는 부적절할 것으로 보입니다. 작성하면서 3분이 흘렀습니다. ^^;;
Sub testMacro()
MsgBox Time
End Sub

2. 속도 측정하기
그럼, Timer라는 함수를 이용해서 어떻게 속도를 측정할 수 있을까요? 간단합니다. 매크로를 시작하기 전에 Timer값과 매크로가 종료될 때 Timer값의 차이를 보면 됩니다.
Sub testMacro1()
Dim timeStart As Single
Dim timeEnd As Single
'시작
timeStart = Timer
'측정할 매크로
For i = 1 To 1000
Cells(i, 1) = 1
Next
'종료
timeEnd = Timer
MsgBox Format(timeEnd - timeStart, "00.00")
End Sub
위 코드는 A1에서 A100까지 1을 입력하는 매크로가 있고, 입력 전에 Timer와 입력 후에 Timer의 차이를 계산해서, MsgBox로 보여줍니다. 해당 매크로는 0.05초가 걸렸네요.

만약, 매크로 측정 단위를 더 세부적으로 하고 싶다면, Format을 변경하면 됩니다. 세자리까지 계산해 보겠습니다. 추가적으로 종료는 별도로 변수를 지정하지 않고 계산하셔도 됩니다.
Sub testMacro()
Dim timeStart As Single
'시작
timeStart = Timer
'측정할 매크로
For i = 1 To 1000
Cells(i, 1) = 1
Next
'종료
MsgBox Format(Timer - timeStart, "00.000")
End Sub
속도를 보시면, 0.035초가 걸린 걸 확인할 수 있습니다.

같은 매크로라고 해도, 매번 동일한 속도로 실행되지는 않습니다. 반복적으로 측정해야하고, 범위에 따라 동일한 매크로라도 일정속도로 증가하는 것이 아니라 기하급수적으로 증가할 수 있으니 여러 환경에서 측정할 필요가 있습니다.
'엑셀VBA' 카테고리의 다른 글
[엑셀VBA] Mysql [ODBC 드라이버 관리자] 데이터 원본 이름이 없고 기본 드라이버를 지정하지 않았습니다. (0) | 2023.02.01 |
---|---|
[엑셀VBA] 하이퍼링크 삽입하기 hyperlinks.add (4) | 2023.01.10 |
[엑셀VBA] 파일명 일괄 변경하기 Name As (0) | 2023.01.02 |
[엑셀VBA] 리스트박스 안에 체크박스 만들기 (0) | 2022.12.27 |
[엑셀VBA] 텍스트 박스에 숫자만 입력되도록 하기 (0) | 2022.12.23 |