「Excelで勤怠管理をしたいのに、残業時間の合計がおかしな値になる」「TIME関数で時刻を入力しても書式が変になる」という経験がある方は多いはずです。Excelの時刻計算はシリアル値という独特の仕組みで動いており、そこを理解しないまま数式を書くとトラブルが起きます。
HOUR・MINUTE・SECOND・TIME関数は、時刻の「時」「分」「秒」を取り出したり、指定した時・分・秒から時刻を組み立てたりするための基本関数です。これらを習得すると、出退勤管理・残業集計・シフト表の自動化・24時間超えの合計処理といった業務が正確かつ効率的に実現できます。
本記事では、HOUR・MINUTE・SECOND・TIME関数の基本構文・Excelの時刻シリアル値の仕組み・実務シナリオ別のパターン・24時間超えの書式設定・よくあるエラーと対処法・MOS Excel試験の出題ポイントを体系的に解説します。
Excelの時刻はシリアル値で管理される
Excelでは、日付と時刻を「シリアル値」という数値として内部管理しています。1日=1.0が基本単位で、時刻はその小数部分です。
| 時刻の表示 | シリアル値(小数) | 計算のイメージ |
|---|---|---|
| 0:00(深夜0時) | 0.000000 | 1日の始まり |
| 6:00(朝6時) | 0.250000 | 1日の1/4 |
| 9:00(午前9時) | 0.375000 | 9÷24 |
| 12:00(正午) | 0.500000 | 1日の1/2 |
| 18:00(午後6時) | 0.750000 | 18÷24 |
| 23:59(深夜前) | 0.999306… | ほぼ1.0 |
「9:00」と入力したセルの実態は0.375という数値です。そのためセルの書式を「標準」に変更すると0.375と表示されます。加算・減算も数値の四則演算で行われます。たとえば18:00 - 9:00 = 0.75 - 0.375 = 0.375で、これを時刻書式に戻すと9:00(9時間)と表示されます。
重要な落とし穴:シリアル値は「0.0以上1.0未満」の範囲に収まるため、24時間を超える合計は書式変更が必要です。この点は後の節で詳しく説明します。
HOUR・MINUTE・SECOND関数の基本構文
HOUR・MINUTE・SECOND関数は、時刻シリアル値から「時」「分」「秒」の整数値を取り出す関数です。いずれも引数は時刻を表すセル参照またはシリアル値ひとつだけです。
=HOUR(シリアル値) ' 「時」部分を整数で返す(0~23)
=MINUTE(シリアル値) ' 「分」部分を整数で返す(0~59)
=SECOND(シリアル値) ' 「秒」部分を整数で返す(0~59)
| 関数 | 引数 | 返り値 | 使用例 | 結果 |
|---|---|---|---|---|
| HOUR | 時刻またはシリアル値 | 時の整数(0~23) | =HOUR(“14:35:20”) | 14 |
| MINUTE | 時刻またはシリアル値 | 分の整数(0~59) | =MINUTE(“14:35:20”) | 35 |
| SECOND | 時刻またはシリアル値 | 秒の整数(0~59) | =SECOND(“14:35:20”) | 20 |
実務でよく使う場面:退勤時刻から時間部分だけを取り出して残業判定する・分単位の端数を丸めて勤怠管理する・時刻をテキスト加工に使うために数値化する、といった用途が代表例です。
' セルA2に退勤時刻「18:45」が入っている場合
=HOUR(A2) ' → 18
=MINUTE(A2) ' → 45
TIME関数で時刻を組み立てる
TIME関数は「時・分・秒」の数値から時刻シリアル値を生成します。数値を入力して時刻として扱いたい場面(シフト開始時刻の計算・定時刻の基準値設定など)で使います。
=TIME(時, 分, 秒)
| 引数 | 説明 | 標準範囲 | 範囲外のとき |
|---|---|---|---|
| 時 | 時の整数値 | 0~23 | 24で割った余りが使われる(25→1時) |
| 分 | 分の整数値 | 0~59 | 60で割り繰り上げが発生する(90分→1時間30分) |
| 秒 | 秒の整数値 | 0~59 | 60で割り繰り上げが発生する(90秒→1分30秒) |
=TIME(9, 0, 0) ' → 9:00:00(シリアル値 0.375)
=TIME(17, 30, 0) ' → 17:30:00
=TIME(HOUR(A2)+1, MINUTE(A2), 0) ' A2の時刻の1時間後を求める
TIME関数の戻り値は「0.0以上1.0未満」のシリアル値です。24時間以上は表せない点に注意してください。「25時間」を求めたいときはTIME(25,0,0)がTIME(1,0,0)として処理され、1時間のシリアル値が返ります。月間総労働時間の集計はSUM後に書式設定で対応します(後述)。
実務シナリオ別の活用パターン
シナリオ1:出勤・退勤時刻から実働時間を計算する
最も基本的な勤怠計算です。A列に出勤時刻、B列に退勤時刻が入っており、休憩時間を45分固定とする場合の実働時間を求めます。
' B2: 退勤時刻(例: 18:30)、A2: 出勤時刻(例: 9:00)
=B2 - A2 - TIME(0, 45, 0)
' → 18:30 - 9:00 - 0:45 = 8:45(8時間45分)
この数式はセルの書式が「時刻(h:mm)」に設定されている場合に正しく表示されます。結果がマイナスになる(日をまたぐシフトの場合)は後述の深夜またぎ対処法を参照してください。
シナリオ2:残業時間を分単位の数値に変換する
残業時間を「〇時間〇分」の時刻形式ではなく「分」の整数で管理したい場合は、HOUR・MINUTE関数を組み合わせます。分単位の数値にすることで集計・丸め処理・他システム連携が容易になります。
' D2: 実働時間(例: 9:15 = 9時間15分)、定時 = 8時間00分
' 実働時間を分単位に変換する
=HOUR(D2)*60 + MINUTE(D2)
' → 9*60+15 = 555(分)
' 定時(480分)を差し引いた残業分数を求める
=HOUR(D2)*60 + MINUTE(D2) - (8*60)
' → 555 - 480 = 75(分残業)
' 10分単位で切り捨て処理する(就業規則によって調整)
=FLOOR(HOUR(D2)*60 + MINUTE(D2) - 480, 10)
' → 70(分)
シナリオ3:TIME関数で定時刻の基準値をセル管理する
定時(始業・終業)をセルにTIME関数で生成して一元管理すると、就業規則の変更が一か所で済みます。
' 設定シートの管理セル
' B1(始業時刻): =TIME(9, 0, 0) → 9:00
' B2(終業時刻): =TIME(18, 0, 0) → 18:00
' B3(休憩時間): =TIME(0, 45, 0) → 0:45
' B4(標準労働): =B2-B1-B3 → 8:15
' 勤怠シートで残業時間を求める(C2: 退勤時刻)
=MAX(C2 - 設定!$B$2, 0)
' 終業時刻を超えた分のみ残業として返す(マイナスは0に丸める)
シナリオ4:シフト表で時間帯別稼働人数を集計する
シフト管理表で「各時間帯に何人が稼働しているか」をCOUNTIFS関数とTIME関数の組み合わせで求めます。
' B2:B11: シフト開始時刻(10人分)、C2:C11: シフト終了時刻
' 10:00~11:00の時間帯に稼働している人数を求める
=COUNTIFS(B2:B11,"<="&TIME(10,0,0), C2:C11,">"&TIME(10,0,0))
' 開始が10:00以前 AND 終了が10:00より後 = 10:00時点で稼働中の人数
TIME関数で比較基準を数式内に直接記述できるため、参照用のセルを別途設ける必要がありません。時間帯を連続した行(例: 9:00、10:00、11:00…)に並べて数式を縦にコピーすることで、全時間帯の稼働人数グラフが自動更新されます。
24時間を超える時刻の合計と書式設定
月間総労働時間などをSUMで合計すると、通常の時刻書式では正しく表示されません。「[h]:mm」書式(角カッコ付き)への変更が必須です。
' D2:D22 に各日の実働時間が入っている場合
=SUM(D2:D22)
' 書式が「h:mm」のままだと24時間ごとにリセットされ誤表示になる
' 例: 実際は160:30 なのに「16:30」と表示される
書式設定の手順:
- 合計セルを選択 → Ctrl+1で「セルの書式設定」を開く
- 「表示形式」タブ → 「ユーザー定義」をクリック
- 「種類」欄に
[h]:mmと入力 → OK
| 書式記号 | 動作 | 160時間30分の表示例 |
|---|---|---|
| h:mm | 時が0~23でリセット(24時間超で誤表示) | 16:30(誤) |
| [h]:mm | 時を累積値で表示(24時間超も正しく表示) | 160:30(正) |
| [h]”時間”mm”分” | 「時間」「分」のラベルを付けて表示 | 160時間30分(正) |
月間・週間の勤怠管理シートを作る際は、合計欄のすべてに[h]:mm書式を適用することをルールとして徹底してください。単日の8時間はh:mmでも正しく表示されますが、月間合計では必ず誤表示が発生します。
深夜0時をまたぐシフトの時刻計算
夜勤・深夜シフトでは退勤時刻が翌日の時刻(例:翌1:00)になり、単純引き算でマイナスになります。この場合はIF関数またはMOD関数で対処します。
' A2: 出勤時刻 22:00、B2: 退勤時刻(翌日なので)1:00 と入力
' 方法①: IF関数で翌日分を加算する
=IF(B2 < A2, B2 + 1, B2) - A2
' B2 が A2 より小さい(翌日になっている)場合に1日分(=1)を加算
' 方法②: MOD関数(より短く書ける)
=MOD(B2 - A2, 1)
' 差がマイナスでも MOD(負, 1) で正の値に変換される
' 例: MOD(1:00 - 22:00, 1) = MOD(-0.875, 1) = 0.125 → 3:00
MOD関数を使う方が数式が短く汎用的です。ただし、連続勤務24時間超えには対応できない点に注意してください(MODで24時間超は0時間に丸まります)。24時間超えの勤務が発生する業種では別途フラグ管理を組み合わせることを推奨します。
よくある時刻計算エラーと対処法
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| 月間合計が「16:30」(160時間のはずが) | 書式が h:mm のため24時間でリセットされる | 書式を [h]:mm に変更する |
| HOUR関数が 0 を返す | セルが時刻ではなくテキスト形式で入力されている | TIMEVALUE関数でシリアル値に変換してからHOURに渡す |
| 時刻の差がマイナスになる | 退勤が翌日(深夜シフト)の場合 | MOD(退勤-出勤, 1) または IF(退勤<出勤, 退勤+1, 退勤)-出勤 で処理する |
| TIME関数の結果が想定と違う | 引数に60以上の「分」「秒」を渡している | 引数の繰り上げ動作を確認し、HOUR・MINUTE関数で分解してから渡す |
| 計算結果が「########」と表示される | 列幅が狭いか、負のシリアル値(マイナス時刻)が発生している | 列幅を広げるか、計算式の正負を確認する |
| TEXT関数で時刻を変換すると「0:00」になる | 元のセルが文字列として格納されている | TIMEVALUE関数でシリアル値に変換してからTEXT関数を適用する |
テキスト形式の時刻をシリアル値に変換する:
' A2に文字列 "09:30" が入っている場合
=TIMEVALUE(A2) ' → 0.395833...(シリアル値)に変換
=HOUR(TIMEVALUE(A2)) ' → 9
=MINUTE(TIMEVALUE(A2)) ' → 30
外部システム(勤怠ツール・タイムレコーダーのCSV出力)からコピーした時刻データはテキスト形式になっていることが多いです。HOUR・MINUTE関数に直接渡しても0が返る場合は、まずTIMEVALUEでシリアル値への変換を試みてください。
MOS Excel試験でのHOUR/MINUTE/SECOND/TIME出題ポイント
MOS Excel 365では「日付と時刻の関数を使用する」スキル項目でHOUR・MINUTE・SECOND・TIME関数が出題対象に含まれます。
- HOUR/MINUTE/SECONDの引数:時刻が入ったセル参照を1つだけ渡すことを理解する。複数引数は取らない
- TIME関数の引数順序:「時・分・秒」の順番を正確に覚える。分と秒を逆にするミスが多い
- [h]:mm 書式の適用:24時間超えの合計セルへのユーザー定義書式設定は頻出操作。Ctrl+1 → ユーザー定義 →
[h]:mm入力の操作手順を体で覚える - 深夜またぎの計算:MODまたはIF+1での処理パターンが問われることがある
- NOW/TODAY関数との組み合わせ:HOUR(NOW())で現在時刻の「時」部分を取り出す複合問題に注意
MOS試験 時刻関数チェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| HOUR/MINUTE/SECONDの基本入力 | =HOUR(A2)などを正しく入力し整数値が返ることを確認する | ★☆☆ |
| TIME関数で時刻を生成する | =TIME(9,30,0)などで目的の時刻シリアル値を作れる | ★☆☆ |
| 時刻の差(実働時間)の計算 | =退勤セル-出勤セル-TIME(0,45,0) で正しく時間差が求められる | ★★☆ |
| [h]:mm 書式の適用 | ユーザー定義書式 [h]:mm を設定して24時間超えの合計を正しく表示できる | ★★☆ |
| MODを使った深夜またぎ計算 | =MOD(退勤-出勤,1) で翌日退勤の実働時間を正しく求められる | ★★★ |
| HOUR*60+MINUTEで分換算 | 実働時間を分単位の整数に変換する数式を作成できる | ★★☆ |
まとめ:時刻関数4兄弟で勤怠管理を正確に自動化する
本記事のポイントをまとめます。
- Excelの時刻はシリアル値:1日=1.0の小数部分。この仕組みを理解することがすべての時刻計算の土台になる
- HOUR/MINUTE/SECOND:時刻から時・分・秒の整数を取り出す。勤怠の端数処理・分換算・条件判定に使う
- TIME関数:時・分・秒から時刻シリアル値を生成する。定時刻の基準値設定・シフト計算の比較値生成に活躍する
- [h]:mm 書式が必須:月間・週間の合計には必ず角カッコ付きのユーザー定義書式を設定する
- 深夜またぎはMOD関数:MOD(退勤-出勤, 1)で日付をまたぐシフトでも正しく実働時間を求められる
- テキスト時刻はTIMEVALUE変換:外部データからコピーした文字列時刻はTIMEVALUEでシリアル値に変換してから関数に渡す
時刻関数を正しく使いこなすと、勤怠管理・シフト表・製造ラインの作業時間分析など、多くの実務課題を自動化できます。MOS試験でも時刻計算は必出テーマです。書式設定とシリアル値の仕組みをセットで理解し、実際の勤怠シートで動作を確認することで確実に得点源にしてください。
PR
HOUR・MINUTE・SECOND・TIME関数を含むExcel関数を目的別に引けるリファレンス。時刻・日付・文字列・集計の各カテゴリで実務に直結した使い方を解説しており、MOS試験対策と実務改善を同時に進められます。
PR
改善Excel パフォーマンスを底上げする仕事改善・効率化テクニック
勤怠管理・集計業務の自動化など、Excelを使った仕事の仕組みづくりに焦点を当てた実践書。時刻関数を活用した業務改善の全体像を把握するのに最適です。
