Excel VBAの「TimeValue 関数」について解説します。
TimeValue 関数とは
Excel VBA の TimeValue 関数は、指定日時の時刻 Variant (Date) を返します。
返される値は、小数部分だけのシリアル値 Variant (Date) です。数値として計算に利用するのほか Format関数を併用すれば、さまざまな表示形式に変換することができますし、
では、TimeValue 関数の構文や引数の設定など、実際の使い方について解説していきたいと思います。
TimeValue 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
TimeValue(time)
引数
引数 | 説明 |
---|---|
time | 【必須】時刻または日時を表す文字列式を指定します |
※ time に Null が含まれている場合は、Null が返されます。
※ 時刻は 0:00:00(12:00:00 AM)~23:59:59(11:59:59 PM)までの範囲です。
※ 日時が利用可能な日時の範囲を超えていた場合にはエラーが発生します。
※ 例えば、時に24以上やマイナス、分や秒に60以上やマイナスは指定できません。
戻り値
戻り値 | 説明 |
---|---|
シリアル値 | 時分秒(h:mm:ss)を表す Variant (Date) を返します |
解説(使用例)
TimeValue 関数の使用例で解説します。
TimeValue 関数の戻り値を確認するサンプル
TimeSerial 関数の戻り値とFormat関数で書式設定して表示するサンプルです。
'■TimeValue関数の戻り値を確認するサンプル
Sub TimeValue_Sample01()
Dim st As String
st = Now 'yyyy/mm/dd h:mm:ss
Debug.Print TimeValue(st) & " ←""" & st & """"
st = Date 'yyyy/mm/dd 日付だけで時刻無し
Debug.Print TimeValue(st) & " ←""" & st & """"
st = "2024年7月11日 9時17分2秒" '文字区切り
Debug.Print TimeValue(st) & " ←""" & st & """"
st = "9:17:2" '時刻だけ
Debug.Print TimeValue(st) & " ←""" & st & """"
st = "9:17:2 PM" 'AM/PM 指定
Debug.Print TimeValue(st) & " ←""" & st & """"
st = "9:17:02" '全角文字
Debug.Print TimeValue(st) & " ←""" & st & """"
st = "9時17分02秒" '全角文字
Debug.Print TimeValue(st) & " ←""" & st & """"
st = "午後9時17分" '秒無し
Debug.Print TimeValue(st) & " ←""" & st & """"
End Sub
実行結果のイミディエイト画像がこちらです。
![TimeValue_Sample01 イミディエイトの画像](https://www.kurumico.com/wp-content/uploads/2024/07/vba-timevalue-02.jpg)
3行目、引数(time)の値を格納する変数 st をString型で宣言しています。
1番目(4行目)、Now 関数で取得した値(現在の日付+時刻)が引数の場合です。
時刻データが無いので、0:00:00 が返ってきました。
2番目(7行目)、Date 関数で取得した値(現在の日付のみ)が引数の場合です。
3番目(10行目)、”yyyy年m月d日 h時m分s秒” のように文字区切りの引数の場合です。
4番目(13行目)、”h:mm:ss” のように時刻だけを文字列で指定した引数の場合です。
5番目(16行目)、”h:mm:ss PM” のようにAMまたはPM付きの時刻を文字列で指定した引数の場合です。
6番目(19行目)、”h:mm:ss” のように全角文字で時刻を指定した引数の場合です。
7番目(22行目)、”h時m分ss秒” のように全角文字の日本語区切りで時刻を指定した引数の場合です。
8番目(25行目)、”午後h時mm分” のように全角文字で時刻を秒の指定なしで指定した引数の場合です。
データが無い「秒」の部分は、00 と返されています。
TimeValue 関数は日付を返さない
先ほどのサンプルで、時刻のデータが無い引数の場合「0」が返っていましたが、日付を含む引数の場合の戻り値に日付データが存在しているのかを確認してみます。
'■TimeValueが日付を返さないことを確認するサンプル
Sub TimeValue_Sample02()
Dim sDate As String
'▼時刻を含む日付データの引数を検証
sDate = Now '現在日時を変数に代入
MsgBox sDate & " のTimeValueは、" & _
vbCrLf & TimeValue(sDate) & " です"
MsgBox _
"Format(TimeValue(sDate), ""yyyy/mm/dd hh:mm:ss"") の" & _
vbCrLf & "戻り値は、" & _
Format(TimeValue(sDate), "yyyy/mm/dd hh:mm:ss") & " です" & _
vbCrLf & "シリアル値は、" & CDbl(TimeValue(sDate)) & "です"
End Sub
5行目、Now 関数で取得した値(現在の日付+時刻)を引数に指定しています。
6行目、Now 関数で取得した値と TimeValue の値を MsgBoxに表示します。
![TimeValue_Sample02 実行時のMsgBox画像](https://www.kurumico.com/wp-content/uploads/2024/07/vba-timevalue-03.jpg)
8行目、TimeValue 値を Format関数で日付も含めた表示に指定し、結果を MsgBox に表示します。
あわせて、TimeValue 値を Double型の数値に変換して表示に付け加えています。
![TimeValue_Sample02 実行時のMsgBox画像2](https://www.kurumico.com/wp-content/uploads/2024/07/vba-timevalue-05.jpg)
TimeValue 値を Format関数で日付も含めて表示させた場合、日付部分が「1899/12/30」と表示されました。
これは、VBAの「シリアル値」起点「1899年12月30日」です。日付部分のデータが無い「0」ということをあらわしています。MsgBox に表示されているシリアル値が小数部分だけになっていることでも確認できます。
日付・時刻関数の使用例について
Date 関数のほか「日付・時刻」の関数について解説しているこちらの記事もご覧いただければ幸いです。
Timer など覚えておきたい日付時刻の処理について、より詳しい解説記事がこちらです。サンプルコードも複数掲載していますので是非ご覧ください。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA TimeValue 関数は、指定された日時から 時分秒(h:mm:ss) を表す Variant (Date) を返します。
TimeValue の戻り値は、時刻だけのシリアル値です。日付は含まれていません。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;