【VBA】マクロの処理時間をミリ秒(ms)単位で高精度に計測する方法 (GetTickCount API)

目次

はじめに

VBAの Timer 関数は、マクロの処理時間を秒単位で手軽に計測できますが、非常に高速に完了する処理のパフォーマンスを比較したい場合、秒単位では差が分からず、より精密な計測が必要になります。

このような高精度な時間計測には、Windows APIの GetTickCount 関数が最適です。GetTickCount は、PCが起動してからの経過時間を**ミリ秒(1000分の1秒)**単位で返すため、ごく短時間で終わる処理の速度も正確に計測できます。

この記事では、GetTickCount APIを使って、マクロの処理時間をミリ秒単位で計測する方法を解説します。


処理時間をミリ秒単位で計測するVBAサンプルコード

Declareステートメントは、モジュールの最上部Sub などのプロシージャよりも前)に記述する必要があります。

完成コード

'--- モジュールの最上部にAPI関数を宣言 ---

' 64bit/32bit両対応
#If VBA7 Then
    ' PC起動からの経過時間をミリ秒単位で取得するAPI関数
    Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As LongLong
#Else
    Private Declare Function GetTickCount Lib "kernel32" () As Long
#End If


' 処理時間をミリ秒(ms)単位で計測する
Sub MeasureTimeInMilliseconds()
    
    Dim startTime As LongLong
    Dim endTime As LongLong
    Dim elapsedTime As LongLong
    
    '--- 1. 処理前の時刻を記録 ---
    startTime = GetTickCount()
    
    '--- 2. 計測対象の処理 ---
    ' (例: 10万回のループ処理)
    Dim i As Long
    For i = 1 To 100000
        ' 何か軽い処理
    Next i
    
    '--- 3. 処理後の時刻を記録し、差分を計算 ---
    endTime = GetTickCount()
    elapsedTime = endTime - startTime
    
    '--- 4. 結果を表示 ---
    MsgBox "処理が完了しました。" & vbCrLf & vbCrLf & _
           "経過時間: " & elapsedTime & " ミリ秒", vbInformation, "処理時間計測"
           
End Sub

コードの解説

Declare PtrSafe Function GetTickCount ...

Windows APIである GetTickCount 関数をVBAで利用可能にするための宣言です。

  • As LongLong: 64bit環境 (Vba7) では、GetTickCount が返す値は非常に大きくなる可能性があるため、より大きな数値を扱える LongLong 型で受けるのが安全です。32bit環境では Long のままで問題ありません。

startTime = GetTickCount()

処理を開始する直前の、PC起動からの経過ミリ秒数を変数 startTime に格納しています。

elapsedTime = endTime - startTime

処理が終わった直後の経過ミリ秒数 endTime から、開始前の startTime を引き算します。その差が、まさしく処理にかかった時間(ミリ秒)となります。

Timer 関数との違い

  • 精度: Timer は秒単位(小数点以下あり)、GetTickCount はミリ秒単位(整数)です。短時間の処理では GetTickCount の方が圧倒的に高精度です。
  • リセット: Timer は深夜0時にリセットされますが、GetTickCount はPCを起動してから約49.7日後にリセット(0に戻る)されます。通常のVBAマクロの計測で問題になることはほぼありません。

まとめ

今回は、Windows APIの GetTickCount を使って、マクロの処理時間をミリ秒単位で高精度に計測する方法を解説しました。

  1. GetTickCount APIを宣言する。
  2. 処理の前に GetTickCount の値を記録する。
  3. 処理の後に GetTickCount の値を記録する。
  4. 差分を計算すれば、ミリ秒単位の処理時間になる。

コードのわずかな違いがパフォーマンスにどう影響するかを比較・分析する際など、より厳密な速度計測が必要な場面で、このテクニックは非常に役立ちます。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次