1. 導入:なぜ時刻の「シリアル値」変換が必要なのか?
実務で外部システムから出力されたデータや、手入力されたCSVを取り扱う際、時刻が「文字列」として認識されてしまうことはよくあります。文字列のままだと、Excelはそれらを単なる文字の羅列として扱うため、合計時間の計算や「〇分後の算出」といった算術演算ができません。
今回解説する「TIMEVALUE関数」は、こうした文字列の時刻データを、Excelが計算可能な「シリアル値」に変換する魔法のような関数です。この変換を行うだけで、勤怠管理やスケジュール表の集計が劇的に楽になります。
2. 基礎知識:シリアル値とは何か?
Excelにおいて、時刻は「1日を1」とした時の割合で管理されています。これを「シリアル値」と呼びます。
・0:00:00 = 0
・12:00:00 = 0.5
・23:59:59 = 0.99999
このように、時刻は「0以上1未満の数値」として保存されています。文字列で「15:30」と書かれていても、Excelには「15:30」という数値は見えていません。TIMEVALUE関数を使うことで、この「文字」を「計算できる数値」に引き上げることができるのです。
3. 実装・解決策:基本の使い方
TIMEVALUE関数の書式は非常にシンプルです。
=TIMEVALUE(“時刻を表す文字列”)
注意点として、数式内に直接時刻を書く場合は、必ずダブルクォーテーション(”)で囲む必要があります。これを忘れるとエラーになりますので注意してください。また、対象セルを指定する場合は、=TIMEVALUE(A1) のようにセル参照を使います。
4. サンプルプログラム:VBAで活用するなら
VBAで大量のデータに含まれる「文字列の時刻」をシリアル値に変換し、計算を行うサンプルコードを紹介します。実務でよくある「作業終了時刻から休憩時間を引く」ようなケースを想定しています。
Sub ConvertAndCalculateTime()
Dim strTime As String
Dim serialTime As Double
Dim workTime As Double
‘ セルA1に文字列で「18:30」と入力されていると仮定
strTime = Range(“A1”).Value
‘ 1. TIMEVALUE関数を使って文字列をシリアル値に変換
‘ VBA内では Application.Evaluate または WorksheetFunction を使用します
serialTime = Application.WorksheetFunction.TimeValue(strTime)
‘ 2. 例:1時間(1/24)を引いてみる
workTime = serialTime – TimeValue(“1:00”)
‘ 結果をセルB1に出力し、表示形式を時刻にする
With Range(“B1”)
.Value = workTime
.NumberFormatLocal = “h:mm”
End With
MsgBox “変換と計算が完了しました。”
End Sub
5. 応用・注意点:現場で陥りやすい罠
・日付が含まれる場合: TIMEVALUE関数は、文字列の中に日付が含まれていても、時刻部分のみを抽出してシリアル値に変換します。しかし、日付まで含めて計算したい場合は「DATEVALUE関数」を併用するか、そのまま数値化する工夫が必要です。
・表示形式の設定: 変換した直後は「0.6875」のような数値が表示されることがあります。これはExcelが「正しいシリアル値」を返した証拠です。セルの書式設定を「時刻」に変更すれば、元の「16:30」の形式で見られるようになります。
・エラー回避: 対象セルが空白だったり、時刻以外の文字が入っていたりするとエラーになります。実務では「If IsDate(Range(“A1”).Value) Then…」のように、データが時刻形式かどうかを判定するロジックを挟むのがベテランの流儀です。
