VBA (Excel)에서 밀리 초로 데이트 디프 값을 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/939230

  •  06-09-2019
  •  | 
  •  

문제

밀리 초의 두 타임 스탬프의 차이를 계산해야합니다. 불행히도, 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()), 당신은 이것을 할 수 있습니다 :

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top