Timerクラス
最近の働き方改革で夜遅くまでオフィスで仕事をしない人は関係ない話なので、この記事は読まなくても大丈夫です。
経過時間をざっくり計算するために一番簡単な方法はVBAのTimer関数です。たいていの人がこんな感じで済ませていると思いますが、これだと対応できないケースがあります。
Double dStart As Double Double dEnd As Double dStart = Timer ..... ..... dEnd = Timer Debug.Print "Elapsed: " & dEnd - dStart
ローカル変数で宣言してるけど、複数計測したい場合に変数を個数分宣言しなきゃいけないのは煩雑。そもそもタイトルがTimerクラスってなってるしw
残念でした。不正解です。日付をまたいだケースに対応できないが正解です。Timer関数は午前0時からの経過秒数を返してきます。そのため夜0時をまたぐと上記のdEnd - dStartがマイナスになってしまいます。
例: 23:55PMにプログラムを走らせて、0:05に処理が終わった。
dStart = Timer '(23*60+55) *60 = 86100
dEnd = Timer '5 * 60 = 300
Elapsed: -85800 '300 - 86100
日付が変わるまでオフィスで仕事をしない人は関係ないと言った理由がお分かりいただけただろうか。自宅のPCで何か走らせたい人は下のコードをコピペしてください。
グローバルモジュールで関数を定義してもいいですが、それだと1箇所でしか計測できません。そのためにクラスにしておくとよいでしょう。
Option Explicit Private m_dStartTime As Double Private m_dEndTime As Double ' --------------------------------------------- ' タイマー ' --------------------------------------------- Public Sub StartTimer() m_dStartTime = Timer m_dEndTime = Timer End Sub Public Function ElapsedTime() As Double m_dEndTime = Timer If m_dEndTime - m_dStartTime < 0 Then ElapsedTime = m_dEndTime + (86400 - m_dStartTime) Else ElapsedTime = m_dEndTime - m_dStartTime End If End Function