Excel - VBA

Macro 실행 시간 측정하기

EGTools 2023. 1. 18. 00:08

Macro를 작성하면서 시간을 1ms라도 줄이기 위해서 

현재 작성한 매크로의 실행 시간을 측정하는 데 사용하기 위해서 사용

 

1. Class 모듈 이름을 "cTimer"로 삽입하고 아래 코드 추가

Option Explicit

#If Win64 Or VBA7 Then
Private Declare PtrSafe Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Private Declare PtrSafe Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long
#Else
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long
#End If

Private t_StartTime As Currency
Private t_EndTime As Currency

Public Sub TimerStart()
    QueryPerformanceCounter t_StartTime
End Sub

Public Sub TimerEnd()
    QueryPerformanceCounter t_EndTime
End Sub

Public Function ElapsedTime()
    Dim tEndTime As Currency
    Dim TickFrequency As Currency
    
    QueryPerformanceFrequency TickFrequency
    
    If t_StartTime = 0 Then ElapsedTime = 0: Exit Function
    
    If t_EndTime > 0 Then
        ElapsedTime = 1000 * (t_EndTime - t_StartTime) / TickFrequency
    Else
        QueryPerformanceCounter tEndTime
        ElapsedTime = 1000 * (tEndTime - t_StartTime) / TickFrequency
    End If
    
    ElapsedTime = IIf(ElapsedTime > 1000, Fix(ElapsedTime / 1000) & ".", "0.") & (ElapsedTime Mod 1000)
    
End Function

 

2. 사용하려는 곳에서 아래처럼 사용

Sub test_timer()
    Dim nT As cTimer
    Set nT = New cTimer

    nT.TimerStart               '// 타이머 시작
    Sleep 1999

    Debug.Print nT.ElapsedTime  '// 중간 시간 점검
    Sleep 555

    nT.TimerEnd                 '// 타이머 종료
    Debug.Print nT.ElapsedTime  '// 종료 시간
End Sub