和風スパゲティのレシピ

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

文字列を時刻(Date型)に変換する-TimeValue関数

文字列を時刻に変換する、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型の変数を用意することを先に検討してください。