勤怠データを取り込んだら、時刻のはずなのに差し引き計算ができない。セルを見ると左寄せになっていて、どうやら文字列として取り込まれたみたいだ。
こうなると一つずつ手入力で直すのは大変ですよね。数百行あるデータなら、なおさらです。
そんなときに使うのがTIMEVALUE関数です。文字列として入っている時刻を、計算に使えるシリアル値に一発変換してくれます。
この記事では、TIMEVALUE関数の基本から、勤怠データの一括変換、DATEVALUE関数やTIME関数・VALUE関数との使い分けまで解説します。
TIMEVALUE関数とは?文字列の時刻をシリアル値に変換する関数
TIMEVALUE関数(読み方: タイムバリュー関数)は、文字列形式の時刻をシリアル値に変換する関数です。
名前は英語の「time(時刻)」+「value(値)」がそのまま関数名になっています。
Googleスプレッドシートでは、時刻を内部的に「シリアル値」という小数で管理しています。1日を「1」として、時刻を0から1未満の小数で表す仕組みです。たとえば12:00(正午)のシリアル値は「0.5」、18:00は「0.75」です。
セルに「10:30」と入力すると、通常はスプレッドシートが自動でシリアル値として認識してくれます。ところが外部システムからのインポートや&での文字列結合で「見た目は時刻だけど中身は文字列」という状態になることがあります。
TIMEVALUE関数は、こうした文字列の時刻をシリアル値に変換してくれます。変換すれば、時間の計算や並べ替えができるようになりますよ。
NOTE
文字列かどうかを見分けるコツは、セルの配置です。数値や時刻は右寄せ、文字列は左寄せで表示されます。左寄せになっていたら文字列の可能性が高いです。
TIMEVALUE関数の基本的な使い方
構文と引数
=TIMEVALUE(時刻文字列)
引数はひとつだけです。時刻を表す文字列をカッコの中に入れます。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 時刻文字列 | 必須 | 時刻を表す文字列、またはセル参照 |
NOTE
日付を含む文字列(”2026/3/15 10:30″など)を渡した場合、日付部分は無視されます。時刻部分のシリアル値だけが返ります。日付も含めて変換したいときはVALUE関数を使ってください。
使用例:文字列の時刻をシリアル値に変換する
もっともシンプルな使い方です。ダブルクォーテーションで囲んだ時刻文字列を指定します。
=TIMEVALUE("10:30")
結果は「0.4375」(シリアル値)です。セルの表示形式が「標準」のままだと小数で表示されます。「表示形式」メニューから「時刻」を選べば、「10:30:00」として表示されますよ。
セル参照でも使えます。A2に文字列「10:30」が入っているとします。
=TIMEVALUE(A2)
結果は同じく「0.4375」です。
さまざまな時刻形式に対応しています。
=TIMEVALUE("10:30") → 0.4375
=TIMEVALUE("10:30:00") → 0.4375
=TIMEVALUE("10:30 AM") → 0.4375
=TIMEVALUE("10:30 PM") → 0.9375
=TIMEVALUE("22:30") → 0.9375
24時間形式・AM/PM形式・秒付き形式など、スプレッドシートが時刻として認識できれば変換できます。
勤怠データで文字列になった時刻を一括変換する
TIMEVALUE関数がもっとも活躍するのは、勤怠データの取り込み場面です。
勤怠システムからの時刻データを変換する
勤怠管理システムから出力したCSVをスプレッドシートにインポートすると、出退勤の時刻が文字列として取り込まれることがよくあります。
A列に文字列の出勤時刻が並んでいるとします。B2に次の数式を入れましょう。
=TIMEVALUE(A2)
この数式をB列にコピーすれば一括変換できます。変換後のB列をコピーして「値のみ貼り付け」すれば、数式を消してシリアル値だけ残せます。
あとはセルの表示形式を「時刻」に変更すれば完了です。
TIP
大量のデータを変換するときは、B列に数式を入れてからB列全体をコピーし、A列に「値のみ貼り付け」すると元のデータを直接置き換えられます。補助列が不要になってすっきりしますよ。
文字列の時刻同士で勤務時間を計算する
文字列のままでは引き算ができません。TIMEVALUE関数で変換すれば計算できます。
A1に出勤時刻「9:00」(文字列)、B1に退勤時刻「17:30」(文字列)が入っているとします。
=TIMEVALUE(B1)-TIMEVALUE(A1)
結果は「0.354166…」です。表示形式を「時刻」にすると「8:30:00」と表示されます。
勤務時間を時間単位の数値で取得したい場合は、24を掛けます。
=(TIMEVALUE(B1)-TIMEVALUE(A1))*24
結果は「8.5」(8時間30分)です。時給計算に使うときはこちらが便利ですよ。
&で結合した時刻文字列をシリアル値に変換する
セルの値を&で結合すると、結果は文字列になります。時刻として使いたい場合はTIMEVALUE関数で変換しましょう。
A1に「10」(時)、B1に「30」(分)が入っているとします。
=TIMEVALUE(A1&":"&B1)
結果は「0.4375」(10:30のシリアル値)です。
ただしこのケースでは、TIME関数で=TIME(A1,B1,0)と書くほうがシンプルです。TIMEVALUE関数は「すでに時刻形式の文字列が存在する」場面で使うのがベストです。
TEXT関数で作った時刻文字列を元に戻す
TEXT関数はシリアル値を文字列に変換する関数で、TIMEVALUE関数とは逆の操作です。
=TEXT(A1, "h:mm") → "10:30"(文字列)
=TIMEVALUE("10:30") → 0.4375(シリアル値)
TEXT関数で書式を整えた結果をさらに計算に使いたくなったら、TIMEVALUE関数で戻せることを覚えておくと便利です。
TIMEVALUE関数のよくあるエラーと対処法
TIMEVALUE関数で発生するエラーは、ほとんどが引数の文字列に関する問題です。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE!エラー | 認識できない時刻形式 | “10:30″のように認識できる形式に修正する |
| #VALUE!エラー | 空のセルを参照している | =IF(A1="","",TIMEVALUE(A1)) で空セルチェック |
| #VALUE!エラー | 余分なスペースが混入 | =TIMEVALUE(TRIM(A1)) でスペースを除去 |
| 小数が表示される | 表示形式が「標準」のまま | 表示形式を「時刻」に変更する(正常動作) |
| すでに時刻のセルに使って同じ値が返る | 参照先がすでにシリアル値 | TIMEVALUE関数は不要。そのセルはすでに時刻として認識されている |
認識できない時刻形式のとき
「10時30分」のように日本語の単位付きで入力されていると、認識できずにエラーになることがあります。
SUBSTITUTE関数で「時」を「:」に、「分」を空文字に置き換えてからTIMEVALUE関数に渡しましょう。
=TIMEVALUE(SUBSTITUTE(SUBSTITUTE(A1,"時",":"),"分",""))
見えないスペースや制御文字があるとき
見た目は正しい時刻なのにエラーが出るときは、スペースや制御文字が混入している可能性があります。
TRIM関数とCLEAN関数で前処理してから変換しましょう。
=TIMEVALUE(TRIM(CLEAN(A1)))
TRIM関数は余分なスペースを除去し、CLEAN関数は印刷できない制御文字を除去します。
IFERRORで安全に変換する
変換できない文字列が混在しているときは、IFERRORで囲むとエラーを回避できます。
=IFERROR(TIMEVALUE(A1), "")
エラーのときは空白を返します。大量データを一括変換するときに便利です。
DATEVALUE関数・TIME関数・VALUE関数との使い分け
文字列と時刻・日付を変換する関数はいくつかあります。目的に応じて使い分けましょう。
| 関数 | 目的 | 使い方の例 |
|---|---|---|
| TIMEVALUE | 文字列の時刻をシリアル値に変換 | =TIMEVALUE("10:30") → 0.4375 |
| DATEVALUE関数 | 文字列の日付をシリアル値に変換 | =DATEVALUE("2026/3/15") → 46097 |
| VALUE関数 | 文字列を数値に変換(日付・時刻・数値すべて対応) | =VALUE("10:30") → 0.4375 |
| TEXT関数 | シリアル値を指定書式の文字列に変換 | =TEXT(0.4375,"h:mm") → “10:30” |
| TIME関数 | 時・分・秒の数値から時刻を作成 | =TIME(10,30,0) → 10:30 |
TIMEVALUEとDATEVALUEの違い
TIMEVALUE関数とDATEVALUE関数は「ペア関数」です。どちらも文字列をシリアル値に変換しますが、対象が異なります。
- TIMEVALUE関数: 文字列の時刻を受け取る(例:
=TIMEVALUE("10:30")) - DATEVALUE関数: 文字列の日付を受け取る(例:
=DATEVALUE("2026/3/15"))
日付+時刻の文字列を渡したときの挙動も対称的です。
=TIMEVALUE("2026/3/15 10:30") → 0.4375(時刻部分のみ)
=DATEVALUE("2026/3/15 10:30") → 46097(日付部分のみ)
TIMEVALUE関数は日付部分を無視し、DATEVALUE関数は時刻部分を無視します。両方のシリアル値が必要なときはVALUE関数を使えば日付+時刻の完全なシリアル値が返ります。
TIMEVALUEとVALUEの違い
VALUE関数は時刻文字列にも使えるため、多くの場面でTIMEVALUE関数と同じ結果になります。
=TIMEVALUE("10:30") → 0.4375
=VALUE("10:30") → 0.4375
結果は同じです。ではどう使い分ければいいのでしょうか。
TIMEVALUE関数は「時刻文字列専用」です。数式を見た人に「この列は時刻データを扱っている」という意図が伝わります。確実に時刻とわかっている列にはTIMEVALUE関数がおすすめです。
一方、VALUE関数は数値も日付も時刻もまとめて変換できます。「何の文字列が入っているかわからない」ときや、日付と時刻が混在している列にはVALUE関数が向いています。
もうひとつの違いは、日付を含む文字列の扱いです。
=TIMEVALUE("2026/3/15 10:30") → 0.4375(時刻部分のみ)
=VALUE("2026/3/15 10:30") → 46097.4375(日付+時刻)
TIMEVALUE関数は日付部分を無視して時刻のシリアル値だけを返します。VALUE関数は日付も含めた値を返します。時刻だけが必要なときはTIMEVALUE関数のほうが安全です。
TIMEVALUEとTIME関数の違い
どちらも時刻のシリアル値を返しますが、入力が異なります。
- TIMEVALUE関数: 文字列の時刻を受け取る(例:
=TIMEVALUE("10:30")) - TIME関数: 時・分・秒の数値を受け取る(例:
=TIME(10,30,0))
時・分・秒がバラバラのセルに入っているならTIME関数を使いましょう。「10:30」のような時刻形式の文字列がすでにあるならTIMEVALUE関数が適しています。
まとめ
TIMEVALUE関数は、文字列形式の時刻をシリアル値に変換する関数です。
ポイントを整理します。
- 構文は
=TIMEVALUE(時刻文字列)の1引数だけ - 勤怠データで時刻が文字列になったときの定番の解決策
- 24時間形式・AM/PM形式・秒付き形式など幅広い形式に対応
- 日付を含む文字列は時刻部分のみ変換(日付は無視される)
- DATEVALUE関数は日付版のペア関数
- VALUE関数との違いは「時刻専用」であること。意図が明確になる
- 時・分・秒がバラバラならTIME関数、文字列がすでにあるならTIMEVALUE関数
- TEXT関数はTIMEVALUE関数の逆操作
- エラーが出たらTRIM・CLEAN関数で前処理、IFERRORで安全に変換
まずは =TIMEVALUE(A2) で勤怠データの文字列時刻を変換するところから試してみてください。
