본문 바로가기

엑셀VBA

[엑셀VBA] 매크로 속도 측정하기 Timer

반응형

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

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초가 걸린 걸 확인할 수 있습니다.

같은 매크로라고 해도, 매번 동일한 속도로 실행되지는 않습니다. 반복적으로 측정해야하고, 범위에 따라 동일한 매크로라도 일정속도로 증가하는 것이 아니라 기하급수적으로 증가할 수 있으니 여러 환경에서 측정할 필요가 있습니다.

반응형