読者です 読者をやめる 読者になる 読者になる

ぼくLog

子持ち、車持ち、マンション持ちの僕の日常を綴ります。車と、ラクをしたい一心で覚えたエクセルVBAを中心になりそうです。

Timer関数を使ったストップウォッチ|エクセルVBA

f:id:yt4u:20160704215724j:plain

エクセルVBAで経過時間を計測するには2つ。

  • Timer関数を使う
  • Windows API の timeGetTime を使う

Windows API を使ったストップウォッチはこちらの記事をご参照ください。

yt4u.hatenablog.com


今回はTimer関数を使ったストップウォッチを作ってみました。

Timer関数とは?

午前 0 時からの経過秒数を表す単精度浮動小数点数型 (Single) の値を返します。
Microsoft Windows では、Timer 関数は秒の小数部を返します。Macintosh では、タイマー刻みは 1 秒です。

Windowsであればミリ秒の計測も可能です。ただ、APIのtimeGetTimeと比較すると計測の正確性がやや劣るとの指摘が散見されます。


実行用標準モジュールを用意

さっそく試してみます。

標準モジュール「blMdlTimer」

Option Explicit

Sub サンプル1()
  Const cRow            As Long = 1000
  Const cCol            As Long = 100
  Dim dblTimer          As Double
  Dim lngR              As Long
  Dim lngC              As Long
 
  dblTimer = Timer
 
  With ActiveSheet
 
    For lngR = 1 To cRow
    
      For lngC = 1 To cCol
      
        .Cells(lngR, lngC).Value = lngR * lngC
      
      Next lngC
    
    Next lngR
  
  End With
  
  
  MsgBox Timer - dblTimer
  

End Sub

最初に、処理開始時の時間をdblTimerに格納します。

その後、1~1,000行、1~100列に適当な数字を入れるようにしています(この処理自体はなんの意味もありません)。

最後に、その時点の時間から処理開始時点の時間を差し引くことで、処理に掛かった時間を取得しています(ここではメッセージボックスで表示しています)。


はい、以上です。

そうなんです。Timer関数は非常にお手軽に使える関数なんですね。APIのtimerGetTimeと比べると圧倒的に簡単に使えます。

時間計測の正確性にやや難ありなんて話もありますが、ミリ秒単位のシビアは時間計測が必要でなければTimer関数で十分なんですね。