「月末に勤怠表で勤務時間を SUM したら、明らかに 100 時間以上あるはずなのに表示は『12:30』になっている……」と頭をかかえたことはありませんか。値そのものは合っているのに、見た目だけ24時間でリセットされたように見える不思議な現象です。
これは Excel が時刻を「シリアル値」という小数で管理していることが原因です。書式設定をひとつ変えるだけで、25時間でも 100 時間でも正しい合計時間として表示できますよ。
この記事では、Excelで時間の合計が24時間を超えると0時に戻ってしまう原因と、[h]:mm 書式での解決手順を紹介します。勤怠集計で役立つ SUMIF との組み合わせまでまとめて解説します。
この記事は次のような人におすすめ
– 勤怠表や工数表で時間を SUM したら表示がおかしくなった
– なぜ24時間で0に戻るのか仕組みから理解したい
– 時間を「分」や「小数時間」に変換して給与計算に使いたい
– マイナスの時間が「####」になって困っている
Excelで時間の合計が24時間を超えると0時に戻ってしまうのはなぜ?
まず原因から押さえておきましょう。仕組みがわかれば、再発もしっかり防げますよ。
原因はExcelの「シリアル値」の仕組み
Excel では時刻を内部的に「シリアル値」という小数で管理しています。1日(24時間)を「1」として、時刻を0以上1未満の小数で表す仕組みです。たとえば 12:00(正午)のシリアル値は「0.5」、6:00 は「0.25」になります。
ここがポイントです。25時間という時間は内部的にシリアル値「1.0416…」として正しく保持されています。問題は表示形式にあります。Excel 標準の h:mm 書式は「1日(整数部分)を切り捨て、その日の時刻(小数部分)だけ表示する」ルールになっています。
そのため 1.0416... を h:mm で表示すると「1日と1時間」と解釈されます。整数1日が丸ごと切り捨てられて「01:00」と見えてしまうわけです。
| 入力(合計時間) | シリアル値 | h:mm 表示 | [h]:mm 表示 |
|---|---|---|---|
| 1時間 | 0.0416… | 1:00 | 1:00 |
| 24時間 | 1 | 0:00 | 24:00 |
| 25時間 | 1.0416… | 1:00 | 25:00 |
| 36時間30分 | 1.5208… | 12:30 | 36:30 |
| 100時間 | 4.1666… | 4:00 | 100:00 |
シリアル値と時刻表示の対応関係(早見表)
主な時刻とシリアル値の対応を覚えておくと、計算結果の検算にも使えて便利です。
| 時刻 | シリアル値 |
|---|---|
| 0:00 | 0 |
| 6:00 | 0.25 |
| 12:00 | 0.5 |
| 18:00 | 0.75 |
| 24:00 | 1(=翌日0:00と同じ) |
| 48:00 | 2 |
Excel の TIME 関数の記事でもシリアル値の仕組みを解説しています。合わせて読むとより理解が深まりますよ。
24時間を超えても合計値そのものは正しい
安心していただきたいのは、セルに格納されている値そのものは正しいということです。表示だけが24時間で巻き戻って見えているだけで、再計算や他の数式での参照には正しい値が使われます。
確認したいときは、合計セルを選択して Ctrl+1 で書式設定を開き「標準」を選んでみてください。シリアル値の生の数値(たとえば 4.1666…)が表示されます。値が壊れたわけではないと確認できますよ。
解決方法:セルの書式設定で「[h]:mm」を指定する
それでは具体的な解決手順を見ていきましょう。[h]:mm という角括弧付きの書式コードを指定するだけです。24時間を超えた時間も累積した経過時間として表示できます。
操作手順(ステップ別)
時間の合計を表示しているセルを選択して、次の手順で書式を変更します。
- 合計セルを選択する
Ctrl+1(または右クリック → 「セルの書式設定」)でダイアログを開く- 「表示形式」タブ → 「ユーザー定義」を選ぶ
- 「種類」の入力欄に
[h]:mmと入力する - 「OK」を押す
これで「25:30」「36:00」「100:00」のように、24時間を超える時間が正しく表示されますよ。
入力するのは半角の角括弧
[h]:mmの角括弧は半角で入力してください。【h】:mmや[h]:mmのような全角だと書式として認識されません。日本語入力モードがオンになっていないか確認しましょう。
ショートカット(Ctrl+1)でセルの書式設定を開く
Ctrl+1(テンキーではなく通常の 1 キー)はセルの書式設定ダイアログを一発で開く定番ショートカットです。マウス操作より圧倒的に速いので、書式変更が多い人はぜひ覚えてください。
複数のセルにまとめて適用したいときは、対象セル範囲を選択してから Ctrl+1 を押せばOKです。
設定が反映されない・元に戻るときのチェックポイント
[h]:mm を設定しても表示が変わらないときは、以下のポイントを確認してみてください。
- 数値ではなく文字列として入力されている: セルの値が左揃えで表示されている場合、文字列扱いになっています。一度セルを削除して
9:30のように半角コロン区切りで入力し直してください - 書式設定が別のセルに適用されている: 合計行ではなく明細行のセルに書式を当てていないか確認しましょう
- コピー貼り付けで書式が上書きされた: 別のセルからコピーした際、書式まで上書きされるとリセットされます。値だけを貼り付けたい場合は「形式を選択して貼り付け」→「値」を使いましょう
CSV出力した時間データは要注意
勤怠システムからCSV出力した時間データは、Excelで開くと文字列のまま読み込まれることがあります。書式設定を変えても見た目が変わらない場合は、まず数値(時刻)として認識されているかを確認しましょう。TIMEVALUE関数で文字列→時刻に変換する手もあります。
知っておきたい時間書式コード4種の早見表
[h]:mm 以外にも、目的別に使える時間書式コードがいくつかあります。覚えておくと給与計算や工数管理で重宝しますよ。
| 書式コード | 用途 | 表示例(合計36時間30分のとき) |
|---|---|---|
[h]:mm | 24時間以上の合計時間(時:分) | 36:30 |
[h]:mm:ss | 秒まで含む合計時間 | 36:30:00 |
[mm] | 合計を「分」単位で表示 | 2190 |
[ss] | 合計を「秒」単位で表示 | 131400 |
[h]:mm(24時間以上の合計時間)
もっとも使うシーンが多い書式です。月間の勤務時間合計やプロジェクトごとの工数集計など、24時間を超える時間を表示したいときの定番です。
[h]:mm:ss(秒まで含む合計時間)
ストップウォッチで計測した作業時間や、コールセンターの対応時間集計など、秒単位の精度が必要な場面で使います。[h]:mm に :ss を付け足すだけです。
[mm](合計を「分」で表示)
合計時間を「2190分」のように分単位で見たいときに使います。1分あたりの単価で計算する場面で便利です。
mm を角括弧で囲むのがポイントです。角括弧がないと「分の部分(30)」だけが表示されてしまいます。
[ss](合計を「秒」で表示)
[mm] の秒版です。API のレスポンスタイム集計や、計測機器から出力された時間データの正規化などで使います。
SUMIF・SUMIFSとの組み合わせで条件付き時間集計
実務でよくあるのが「特定の社員だけ」「特定の日付範囲だけ」を集計したいケースです。時間データであっても SUMIF 関数や SUMIFS 関数は通常通り動作するので、合わせて使いましょう。
SUMIFで特定の社員だけ合計(勤怠集計の例)
たとえば次のような勤怠データがあるとします。
| 日付(A列) | 社員名(B列) | 勤務時間(C列) |
|---|---|---|
| 5/1 | 山田 | 8:00 |
| 5/1 | 佐藤 | 7:30 |
| 5/2 | 山田 | 9:30 |
| 5/2 | 佐藤 | 8:00 |
| 5/3 | 山田 | 8:00 |
山田さんだけの合計時間を出したい場合は、次の数式を使います。
=SUMIF(B2:B6, "山田", C2:C6)
結果はシリアル値「1.0625」(=25時間30分)が返ります。ここで重要なのは、結果セルに必ず [h]:mm 書式を設定することです。既定の h:mm のままだと「01:30」と表示され、また同じ問題に戻ってしまいます。
SUMIFSで複数条件(社員×期間)の集計
「山田さんの5月1日〜5月2日だけ」のように複数条件を指定したい場合は、SUMIFS を使います。
=SUMIFS(C2:C6, B2:B6, "山田", A2:A6, ">=2026/5/1", A2:A6, "<=2026/5/2")
結果: 17時間30分(山田さんの5/1の8:00 + 5/2の9:30)
SUMIFS は条件を何個でも追加できます。「特定の部署×特定の日付範囲×特定のプロジェクト」のような細かい集計にも対応できますよ。
集計結果を必ず「[h]:mm」書式にすること
SUMIF や SUMIFS で時間を集計するときの最大の落とし穴は、集計結果のセルにデフォルトの h:mm 書式が当たってしまうことです。
集計式を入力したら、すぐに Ctrl+1 で書式を [h]:mm に変更する癖をつけておきましょう。集計テンプレートを作成する際にも、合計行・小計行のセルを [h]:mm で揃えておくとミスを防げますよ。
時間を「分」「秒」「小数時間」に変換する方法
時間データを給与計算や原価計算で使うときは、「2:30」のような時刻表示ではなく「2.5時間」や「150分」のような数値が必要になりますよね。シリアル値の仕組みを使えば、シンプルな掛け算で変換できます。
時間→小数時間(×24)給与計算の定番
時給を掛けて給与を計算するとき、「小数時間」への変換が必要です。シリアル値に 24 を掛けるだけで変換できます。
=A2 * 24
たとえば A2 が「8:30」(=シリアル値 0.354166…)なら、結果は「8.5」になります。
| 時刻 | シリアル値 | ×24(小数時間) |
|---|---|---|
| 1:00 | 0.0416… | 1 |
| 8:30 | 0.354166… | 8.5 |
| 25:00 | 1.0416… | 25 |
| 100:30 | 4.1875 | 100.5 |
給与計算の具体例
月間勤務時間が 165:30、時給が 1,500 円のとき:
=A1 24 1500→ 月給 248,250 円
A1 セルには[h]:mm書式で時間が入っている前提です。
変換後のセルは表示形式を「標準」または「数値」に変更してください。そのままだと、また時刻として表示されてしまいます。
時間→分(×1440)
合計時間を分単位で出したい場合は、24 × 60 = 1440 を掛けます。
=A2 * 1440
8:30 → 510分(=8.5 × 60)に変換されます。
先ほど紹介した [mm] 書式を使えば、計算を介さずに分表示できます。ただし =A2 * 1440 で数値として出す方が、後続の計算で扱いやすいですよ。
時間→秒(×86400)
秒単位への変換は 24 × 60 × 60 = 86400 を掛けます。
=A2 * 86400
API のレスポンスタイム集計や、計測機器から出力された時間データの正規化などで使います。
マイナスの時間が「####」になるときの対処法
「退勤予定時刻 − 退勤実績時刻」のように引き算した結果がマイナスになると、Excel では #### と表示されてしまいます。列幅が狭くて起きる #### とは別問題で、こちらは Excel の仕様によるものです。
原因:Excelはマイナスの時刻を表示できない
Excel は既定で「1900年日付システム」を使っており、シリアル値がマイナスになる時刻は表示できません。時刻もシリアル値で管理されているため、マイナスの時刻は #### で代用されます。
セルに格納されている値は計算に使えますが、見た目だけが #### になります。
解決策1:1904年日付システムに切り替える
ブック全体でマイナス時刻を扱いたい場合は、1904年日付システムへ切り替える方法があります。
- 「ファイル」 → 「オプション」を開く
- 左側のメニューから「詳細設定」を選ぶ
- 「次のブックを計算するとき」セクションの「1904年日付システムを使用する」にチェックを入れる
- 「OK」を押す
これでマイナスの時刻が -1:30 のように表示されるようになります。
既存の日付データが4年ずれる副作用
1904年日付システムへの切替はブック全体に影響します。既に入力済みの日付データがすべて4年と1日ずれて表示されます。新規ブックでない限り、基本的にはおすすめしません。次に紹介する IF関数を使った方法のほうが副作用がなく安全ですよ。
解決策2:IF関数で符号を判定して表示する
ブック全体に影響を出さずにマイナス時刻を扱いたいなら、IF 関数で正負を判定して文字列として表示するのが安全です。
=IF(B2>=A2, TEXT(B2-A2, "h:mm"), "-"&TEXT(A2-B2, "h:mm"))
この数式は次のように動作します。
- B2(退勤)が A2(出勤予定)以上なら、差分を「h:mm」形式で表示
- それ以外(=マイナス)なら、絶対値を求めて頭に「-」を付けて表示
結果は文字列になるため、後の集計に使う場合は注意が必要です。集計用の数値が必要な場面では、別セルで =B2-A2 の数値(マイナスのシリアル値)を保持しておき、表示用には IF + TEXT を使うのがおすすめです。
解決策3:TEXT関数の書式コードで正負両方を指定する
TEXT 関数の書式コードはセミコロンで区切ると、正の値・負の値の表示を別々に指定できます。
=TEXT(B2-A2, "[h]:mm;-[h]:mm")
[h]:mm;-[h]:mm の前半が正の値の書式、セミコロン後の -[h]:mm が負の値の書式です。IF 関数より数式がシンプルになるのが利点です。
1904年日付システムが必要
この数式は 1904年日付システムを有効にしているブックでのみ機能します。既定の 1900年日付システムではマイナスのシリアル値を保持できないため、B2-A2 がマイナスになった時点で
####になります。マイナス時刻の扱いには解決策1との併用が前提です。
なお、列幅不足で #### になるケースは Excel の表示形式とは別問題です。詳しくは Excelのセルに「####」が表示される原因と直し方の記事で解説しています。
よくあるトラブルとQ&A
最後に、時間集計でつまずきやすいケースをまとめておきます。
[h]:mmを設定しても表示が変わらない
セルに入っているデータが文字列として認識されている可能性が高いです。次の手順で確認しましょう。
- 該当セルを選択して、表示が左揃えになっていないか確認する(左揃え=文字列)
- 一度セルを削除し、
9:30のように半角コロン区切りで入力し直す - それでもダメな場合は、TIMEVALUE関数で文字列→時刻に変換する
合計が0:00と表示される(時間として認識されていない)
合計対象セルの一部に文字列が混ざっていると、SUM の結果が「0:00」になります。
対処法として、=SUMPRODUCT(TIMEVALUE(A2:A10)) のように文字列を時刻に変換してから集計する方法があります。あるいは、元データの入力ルールを見直してすべて時刻形式で入力し直すのが根本的な解決策です。
印刷したら時間表示が崩れる
[h]:mm:ss のような長い書式を使っているとき、列幅が足りないと印刷時だけ #### が表示されることがあります。
印刷プレビューで確認してから、Alt+H, O, I(列幅自動調整)で対処してください。給与計算書のような毎月使うテンプレートでは、最大値(例: 200:00:00)が入っても収まる列幅をあらかじめ設定しておくと安心です。
24時間ぴったり(24:00)と表示したいのに「0:00」になる
「24:00」と入力したいのに勝手に「0:00」になってしまうのは、Excel が「24:00 = 翌日 0:00」と解釈してしまうためです。
[h]:mm 書式を当てた状態で、セルに =1(シリアル値1=24時間)と入力すると「24:00」と正しく表示されますよ。
まとめ
Excelで時間の合計が24時間を超えると0時に戻ってしまう問題と解決法を紹介しました。要点をおさらいしておきましょう。
- 原因は Excel が時刻を「シリアル値(1日=1の小数)」で管理していること
- 既定の
h:mm書式は1日(整数部分)を切り捨てるため、24時間を超えた分が表示されない - 解決策は
Ctrl+1で書式を[h]:mmに変更すること [h]:mm:ss[mm][ss]を使い分けると、秒単位や分単位の合計表示にも対応できる- SUMIF・SUMIFS と組み合わせるときも、結果セルに必ず
[h]:mmを当てること - 時間→小数時間は ×24、時間→分は ×1440、時間→秒は ×86400
- マイナス時間の
####は IF 関数 + TEXT 関数または 1904年日付システムで解決
勤怠管理や工数集計でこの問題に毎月ぶつかっている人は、テンプレート段階で合計セルに [h]:mm を仕込んでおくのがおすすめですよ。次の月末からは集計のたびに悩む時間がなくなって、本来の業務に集中できますね。
時間関連の関数についてもっと知りたい場合は、HOUR関数・MINUTE関数・SECOND関数の記事も合わせて読んでみてくださいね。
