Excelで残業時間を計算していると「マイナスになる」「####と表示される」「#VALUE!エラーが出る」という問題によく遭遇します。
これはExcelの時間の仕組みが原因です。この記事では原因と3つの解決方法を実務目線で解説します。
目次
なぜ残業時間がマイナスになるのか?
例えばこんな計算式を使っているとします。
=退勤時刻 - 出勤時刻 - 所定労働時間
例)=B2-A2-C2 (18:00-9:00-8:00=1:00)
残業がある日はうまく計算できます。しかし残業なしの日や早退した日に式を使うと、結果がマイナスになりExcelが####と表示します。
Excelは標準設定ではマイナスの時間を表示できない(シリアル値がマイナスになるため)ので、エラーになります。
セルナ先生:「給与計算でこのエラーを見た時、最初は壊れたと思いました。でも原因を知ると対処は簡単です」
解決方法①:MAX関数でマイナスを0にする(最もシンプル)
残業時間がマイナスになっても0として扱いたい場合は、MAX関数を組み合わせます。
=MAX(0, B2-A2-C2)
「0かB2-A2-C2の大きい方を返す」という意味です。計算結果がマイナスになっても0が表示されます。
解決方法②:IF関数でマイナスの場合を除外する
=IF(B2-A2-C2<0, 0, B2-A2-C2)
「もし計算結果が0より小さければ0、そうでなければ計算結果を表示」という式です。MAX関数と同じ結果になりますが、IF関数に慣れている方はこちらの方が読みやすいかもしれません。
解決方法③:1904年日付システムに変更(全体設定)
Excelの設定で「1904年から計算する」をオンにすると、マイナスの時間も表示できるようになります。
- 「ファイル」→「オプション」→「詳細設定」
- 「このブックの計算をするとき」セクションの「1904年から計算する」にチェック
- OKを押す
ただし、この設定はブック全体に影響します。既存のデータの日付がずれる可能性があるため、新規ブックで使うか、影響を確認してから設定してください。
####エラーの別の原因:列幅が狭い
「####が出る=マイナス時間」と思いがちですが、単純に列幅が狭い場合もあります。列の境界線をドラッグして広げるだけで直ることがあるので、まず確認してみましょう。
まとめ
- 残業時間がマイナスになるのは、Excelがマイナス時間を表示できないのが原因
- 最も簡単な解決策は=MAX(0, 計算式)でマイナスを0にする
- IF関数でも同様の処理ができる
- ####は列幅不足でも出るので確認すること



コメント