SHOJI's Code
仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++,JavaScript等)、その他雑記。
アクセスアップ・SEO対策・検索エンジン登録
2008.06<<12345678910111213141516171819202122232425262728293031>>2008.08
タイマー色々 (EXCEL VBA)
以前「VBA(EXCEL)でタイマー処理」という記事でエクセルVBAによるタイマー処理のプログラミングコードを載せたが、それに関連して経過時間を取得するマクロをサンプルとして並べてみた。

Declare Function GetTickCount Lib "kernel32" () As Long
Declare Function timeGetTime Lib "winmm" () As Long

Declare Function QueryPerformanceFrequency Lib "kernel32" _
(ByRef lpFrequency As LongLong) As Long
Declare Function QueryPerformanceCounter Lib "kernel32" _
(ByRef lpCounter As LongLong) As Long

Type LongLong
l As Long
h As Long
End Type

Sub test()
start_timeGetTime = timeGetTime()
start_GetTickCount = GetTickCount()
start_Timer = Timer * 1000

freq_Perf = GetFrequency()
start_Perf = GetCounter()

For i = 1 To 10000
Sheet1.Range("A" & i).Value = _
Timer * 1000 - start_Timer

Sheet1.Range("B" & i).Value = _
GetTickCount() - start_GetTickCount

Sheet1.Range("C" & i).Value = _
timeGetTime() - start_timeGetTime

Sheet1.Range("D" & i).Value = _
(GetCounter() - start_Perf) * 1000 / freq_Perf
Next i
End Sub

Function GetFrequency() As Long
Dim freq As LongLong
QueryPerformanceFrequency freq
GetFrequency = freq.l
End Function

Function GetCounter() As Long
Dim cnt As LongLong
QueryPerformanceCounter cnt
GetCounter = cnt.l
End Function



TimerはEXCEL標準のタイマー関数である。0時からの経過時間をミリ秒で返す。
GetTickCount()、timeGetTime()はWindows起動時からの経過時間をミリ秒で返す。
上記マクロを実行させるとわかるが、これらはいずれも精度は15ミリ秒程度である。timeGetTime()は精度1ミリ秒と書かれているところもあるが、実際に実行させると15ミリ秒だった。高精度にするために何かしなければいけないのかもしれないがそこまではわからなかった。

QueryPerformanceCounter()は高分解能パフォーマンスカウンタの現在値を返すものである。カウンタなので1秒当りのカウント数をQueryPerformanceFrequency()で取得しておき、そこから時間を計算している。
扱う値は64bit整数なのだが、ここではちょっと手抜きをして下位32bitだけ使っている。厳密にはちゃんと計算しないといけない。だが、実際に実行してみるとかなりの精度で経過時間が取得できることがわかる。
(VBAでそこまで精度の必要な処理が必要かどうかは疑問だが(^^;)
テーマ:EXCEL - ジャンル:コンピュータ
コメント
この記事へのコメント
timeGetTimeはtimeBeginPeriodで分解能を指定する

QueryPerformanceCounterは分解能は高いが、精度が高いわけではないので勘違いしないように
2008/06/12(木) 11:24:54 | URL | #-[ 編集]
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
EXCEL
2006/05/13(土) 09:28:44 | アイドル芸能Shop
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て