随分MicrosoftExcelのVBAでマクロを組んできた。フリーソフト開発秘話、目次へ
自分で言うのもなんだが、かなり汎用性が高くて、単純再実行ができるように作っているので、いつの間にか適用箇所が広がってきて、当初は想定していなかったような量のデータを取り扱うことになることも多い。
そうするとパフォーマンスの改善、なんてことをやることになるのだが、そのためには修正前後の実行時間を計る必要が出てくる。
ストップウォッチでやるのも面倒なので、プログラムの中で最初と最後にコードを入れて終了ダイアログボックスの代わりに所要時間を表示するようにしたいと思った。
ところで私はコンピュータが苦手なので、MS-Excelでマクロ組むときには、いろいろなサイトにお世話になっている。もちろんこの手のコードもWebを巡ってもらってくる。ところが、
実行時間が数時間に及ぶってざらだし、
VBAの datediff 関数って、相当アテにならないのよねえ。
というわけで、改良してみた。
いわば参考にさせていただいたみなさまへの恩返しだ。
'<メッセージボックスに所要時間を出す> Dim StartTime, StopTime As Double Dim dt As Date Dim hh As String, mm As String, ss As String Dim 経過時間 As String 'ここから実行時間のカウントを開始します StartTime = CDbl(Now) DoEvents 'ここに処理を入れる。 '処理終了時刻の取得 StopTime = CDbl(Now) 'datediffで計算すると、ときどきずれるからしてシリアル値を数値として計算。 dt = CDate(StopTime - StartTime) hh = Format(dt, "h") mm = Format(dt, "nn") ss = Format(dt, "ss") If hh <> "0" Then 経過時間 = hh & "時間" & mm & "分" & ss & "秒" Else 経過時間 = mm & "分" & ss & "秒" End If MsgBox ("処理完了:" & 経過時間)