現在の時刻を取得する際に使用する、
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関数を使う機会はあまりないかもしれませんね。