文字列を時刻に変換する、TimeValue関数の使い方を解説します。
基本形
TimeValue(時刻と判定できる文字列)
実行例
' 文字列を時刻(Date型)に変換 TimeValue("14:30") ' = #14:30:00# TimeValue("2025/6/13 14:30") ' = #14:30:00# TimeValue("午後2時30分") ' = #14:30:00# TimeValue("2:30 PM") ' = #14:30:00# TimeValue("25:00") ' 「型が一致しません」エラー TimeValue("abc") ' 「型が一致しません」エラー ' シリアル値には実行不可 TimeValue(0.5) ' 「型が一致しません」エラー TimeValue(45000) ' 「型が一致しません」エラー
TimeValue関数は時刻と判定できる文字列をDate型に変換する関数です。
日付・時刻ともにデータ型としては同じDate型になるため、
正確には日付が0(1899年12月31日)の日付型を時刻として返します。
シート関数の「TIMEVALUE関数」とほぼ同じ仕様で、
シリアル値や既に日付型の値を直接変換することはできません。
シリアル値やDate型の値を扱いたい場合は、
CDate関数やFormat関数を使用してください。
また、TimeValue関数は、文字列から時刻部分のみを抽出しますので、
日付+時刻の文字列を渡すと、日付部分は無視して時刻のみを返します。
日付+時刻をセットでDate型として取り出す場合は、
同じくCDate関数を利用して下さい。
さてDateValue関数は一見便利そうな関数なのですが、
実はVBAではこの関数を使用しなくても以下のコードで同じことができます。
Dim 時刻 As Date 時刻 = "14:30" ' #14:30:00#が代入されます。 時刻 = "午後2時30分" ' #14:30:00#が代入されます。 時刻 = 14.5 / 24 ' #14:30:00#が代入されます。
ExcelVBAは暗黙の型変換を行ってくれる言語のため、
Date型の変数に代入しても自動でTimeValueと同じ変換が実行されます。
加えて、暗黙の型変換はシリアル値⇒日付にも対応していますので、
特に「設定時刻 / 24」の代入にも対応している点が便利ですね。
時刻を扱う際はしっかり変数に入れた方が読みやすいコードになるため、
この関数を使うよりは、Date型の変数を用意することを先に検討してください。