和風スパゲティのレシピ

日本語でコーディングするExcelVBA

Time関数とTimer関数の違い

現在の時刻を取得する際に使用する、
Time関数とTimer関数の違いを解説します。

同じところ

どちらも現在の時刻を取得します。

違うところ

単位(=返り値の型)と精度が違います。


まず、Time関数はDate型を返します。

つまり「1日を1としたときの値」を返しますので、
1日を超えないTime関数は、0~1の間の値を返すことになります。


Date型ですので精度は秒単位です。



一方、Timer関数は小数点付きの秒をSingle型で返します。

この小数の精度は、およそ1/100秒単位まで測ることができます。



両関数が「なにを1とした値を返すか」という視点で見ると、
Timeは1日を1、Timerは1秒を1としています。

よって、

Time * 60 * 60 * 24 = Int(Timer)

という等式が成り立ちます。

使い分け

要求する精度で使い分けます。

秒精度で十分ということであれば、Time関数は

Hour(Time)
Minute(Time)
Second(Time)
Format(Time, "h:mm:ss")

このようなDate型を受け取る関数群を、簡単に使うことができます。


また、Time関数の値をセルに出力した際も、
セルの表示書式関連を活用することができます。

(一応Timer関数も、/60/60/24をすればできないことはない)


対してTimerは1/100秒の精度で測定ができるため、

開始時刻 = Timer

測定したい処理

終了時刻 = Timer
Debug.Print "マクロの実行時間:" & 終了時刻 - 開始時刻

このようなコードを用いることで、
マクロの実行時間を正確に測ることができます。


表示の楽さならTime、精度ならTimerに軍配ということで、

  • ユーザー目線で何かやるときはTime関数
  • エンジニア目線で何かやるときはTimer関数

と思っておけばよいかもしれません。


Timer関数を利用したマクロの実行時間測定については、
こちらの記事をどうぞ。
www.limecode.jp




ちなみに、よくよく考えてみると、

Hour(Now)
Minute(Now)
Second(Now)
Format(Now, "h:mm:ss")

このようにNow関数(現在の日時を取得)を使用した各Date関数は、
Time関数を渡した時と全く同じ値を返します。


その上で、ファイル名の重複対策などで、

Format(Now, "yyyymmddhhmm")

と日付までほしい場合は、もちろんNow関数でしか出来ません。


ということで、

  • ユーザー目線で何かやるときはNow関数
  • エンジニア目線で何かやるときはTimer関数

という使い分けでも特に問題がありません。


Now関数を使う癖がついている方は、
Time関数を使う機会はあまりないかもしれませんね。