VBA (Excel)에서 밀리 초로 데이트 디프 값을 얻는 방법은 무엇입니까?
문제
밀리 초의 두 타임 스탬프의 차이를 계산해야합니다. 불행히도, VBA의 Datediff-function은 이러한 정밀도를 제공하지 않습니다. 해결 방법이 있습니까?
해결책
설명 된 메소드를 사용할 수 있습니다 여기 다음과 같이 :-
호출 된 새 클래스 모듈을 만듭니다 StopWatch
다음 코드를 StopWatch
클래스 모듈 :
Private mlngStart As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Sub StartTimer()
mlngStart = GetTickCount
End Sub
Public Function EndTimer() As Long
EndTimer = (GetTickCount - mlngStart)
End Function
코드를 다음과 같이 사용합니다.
Dim sw as StopWatch
Set sw = New StopWatch
sw.StartTimer
' Do whatever you want to time here
Debug.Print "That took: " & sw.EndTimer & "milliseconds"
다른 방법은 VBA 타이머 기능의 사용을 설명하지만 이는 초 100 분의 1 (센티스 초)에만 정확합니다.
다른 팁
센티스 초에 경과 시간이 필요한 경우 TickCount API가 필요하지 않습니다. 모든 사무실 제품에 존재하는 VBA.Timer 방법 만 사용할 수 있습니다.
Public Sub TestHarness()
Dim fTimeStart As Single
Dim fTimeEnd As Single
fTimeStart = Timer
SomeProcedure
fTimeEnd = Timer
Debug.Print Format$((fTimeEnd - fTimeStart) * 100!, "0.00 "" Centiseconds Elapsed""")
End Sub
Public Sub SomeProcedure()
Dim i As Long, r As Double
For i = 0& To 10000000
r = Rnd
Next
End Sub
마이크로 초를 원한다면 gettickcount 및 성능 카운터가 필요합니다. Millisenconds의 경우 이와 같은 것을 사용할 수 있습니다 ..
'at the bigining of the module
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
'In the Function where you need find diff
Dim sSysTime As SYSTEMTIME
Dim iStartSec As Long, iCurrentSec As Long
GetLocalTime sSysTime
iStartSec = CLng(sSysTime.wSecond) * 1000 + sSysTime.wMilliseconds
'do your stuff spending few milliseconds
GetLocalTime sSysTime ' get the new time
iCurrentSec=CLng(sSysTime.wSecond) * 1000 + sSysTime.wMilliseconds
'Different between iStartSec and iCurrentSec will give you diff in MilliSecs
당신은 또한 사용할 수 있습니다 =NOW()
세포에서 계산 된 공식 :
Dim ws As Worksheet
Set ws = Sheet1
ws.Range("a1").formula = "=now()"
ws.Range("a1").numberFormat = "dd/mm/yyyy h:mm:ss.000"
Application.Wait Now() + TimeSerial(0, 0, 1)
ws.Range("a2").formula = "=now()"
ws.Range("a2").numberFormat = "dd/mm/yyyy h:mm:ss.000"
ws.Range("a3").formula = "=a2-a1"
ws.Range("a3").numberFormat = "h:mm:ss.000"
var diff as double
diff = ws.Range("a3")
이 오래된 게시물을 깨우려고 사과하지만 답을 얻었습니다.
다음과 같이 밀리 초에 함수를 작성하십시오.
Public Function TimeInMS() As String
TimeInMS = Strings.Format(Now, "HH:nn:ss") & "." & Strings.Right(Strings.Format(Timer, "#0.00"), 2)
End Function
서브 에서이 기능을 사용하십시오.
Sub DisplayMS()
On Error Resume Next
Cancel = True
Cells(Rows.Count, 2).End(xlUp).Offset(1) = TimeInMS()
End Sub
Adamralph에 의해 기술 된 방법 외에GetTickCount()
), 당신은 이것을 할 수 있습니다 :
- 사용
QueryPerformanceCounter()
그리고QueryPerformanceFrequency()
API 기능
VBA 코드의 실행 시간을 어떻게 테스트합니까? - 또는 Win32 API (VBScript)에 액세스하지 않은 환경의 경우 :
http://ccrp.mvps.org/ ( "고성능 타이머"설치 가능한 COM 개체에 대한 다운로드 섹션을 확인하십시오. 무료입니다.)
제휴하지 않습니다 StackOverflow