科学

【Excel】エクセルの時間計算でマイナス表示する・0にする(赤字:24時間:合計など)

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

Excelで時間計算を行う際、マイナスの時間を扱う場面は意外と多く発生します。

勤怠管理で時間外労働を計算する、予定時間と実績時間の差を求める、シフト管理で不足時間を把握するなど、時間のマイナス値を正しく表示して計算することは、業務管理の正確性を保つために非常に重要です

しかし、Excelの時間計算でマイナスが発生すると、「#######」というエラー表示になったり、意図しない結果になったりすることがあります。これは、Excelの日付・時刻システムの仕様によるもので、適切な設定や数式を使わないと正しく処理できません。

Excelで時間のマイナスを扱う方法は複数あります。

1904年日付システムの設定変更、時刻を数値に変換してから計算、IF関数やMAX関数でマイナスを0にする方法、表示形式でマイナスを赤字にする方法など、目的や環境に応じて最適な方法が異なります。

本記事では、時間計算でマイナスを表示する基本設定から、マイナスを0に置き換える方法、24時間を超える時間の扱い、合計計算でのマイナス処理まで、実務で即活用できる様々なテクニックを詳しく解説します。

勤怠管理や工程管理など、時間を扱う業務を効率化したい方は、ぜひ最後までお読みください。

ポイントは

・1904年日付システムを有効にすればマイナス時間が表示できる

・時刻に24を掛けて数値化すれば1900年システムでもマイナス計算可能

・IF関数やMAX関数でマイナスを0に置き換えられる

です。

それでは詳しく見ていきましょう。

時間計算でマイナスが表示されない原因

それではまず、エクセルで時間計算をした際にマイナスが正しく表示されない原因を確認していきます。

1900年日付システムの制限

Excelで時間計算のマイナスが「#######」と表示される最大の原因は、デフォルトの1900年日付システムが負の時刻値をサポートしていないことです

Excelでは、日付と時刻を内部的にシリアル値という数値で管理しています。

1900年1月1日を1として、1日は1、0.5は12時間(半日)を表します。

この仕組みでは、0未満の値(マイナス)を時刻として表現できないため、引き算の結果がマイナスになると表示できなくなります。

例えば、A1セルに9:00、B1セルに10:00が入っていて、C1セルに「=A1-B1」という数式を入力すると、結果は-0.04166…(-1時間)になりますが、1900年日付システムではこれを時刻形式で表示できず、「#######」というエラーが表示されます。

1900年日付システムの問題

正常な計算

10:00 – 9:00
= 1:00
(正の値)

マイナスの計算

9:00 – 10:00
= #######
(エラー)
A列(開始) B列(終了) 数式(=A1-B1) 1900年システムの表示
9:00 10:00 =A1-B1 #######
14:00 16:30 =A1-B1 #######
10:00 9:00 =A1-B1 1:00
8:00 17:00 =A1-B1 #######

時刻形式と数値形式の違い

時刻を扱う際、時刻形式と数値形式では計算結果の表現方法が異なります

セルの表示形式が「時刻」になっている場合、Excelは値を「h:mm」や「h:mm:ss」という時刻形式で表示しようとします。

しかし、マイナスの値は時刻形式で表現できないため、エラーになります。

一方、セルの表示形式を「標準」や「数値」にすると、時刻は小数として表示されます。

9:00は0.375(24分の9)、10:00は0.41666…(24分の10)という数値で、9:00-10:00は-0.04166…と計算されます。

この数値自体は正しく計算されているため、表示形式を工夫することで対応できます。

時刻形式と数値形式の違い

時刻形式

9:00

見た目重視
マイナス不可

数値形式

0.375

計算重視
マイナス可能
時刻 シリアル値(数値) 時刻形式表示 数値形式表示
9:00 0.375 9:00 0.375
12:00 0.5 12:00 0.5
-1:00 -0.04166… ####### -0.04166…
24:00 1 0:00 1

24時間を超える時間の扱い

24時間を超える時間を表示する場合も、通常の時刻形式では正しく表示されません

例えば、25時間という値は、通常の「h:mm」形式では「1:00」と表示されてしまいます。

これは、24時間で1日とリセットされるためです。

24時間を超える時間を正しく表示するには、表示形式を「[h]:mm」のように角かっこで囲む必要があります。

角かっこを付けることで、24時間を超えても累積時間として表示されます。

この設定は、マイナス時間の表示にも関連し、マイナスを正しく扱うための重要な要素です。

時間計算でマイナスが表示されない問題は、Excelの根本的な仕様に起因するため、完全に回避することは難しい場合があります。

しかし、仕様を理解した上で適切な設定や数式を使用すれば、ほとんどの業務要件に対応できます。

重要なのは、時刻は内部的には数値であり、表示形式によって見え方が変わるだけという点を理解することです。

この理解があれば、時刻を一旦数値に変換して計算し、最後に時刻形式に戻すという発想ができるようになります。

また、業務環境によっては、1904年日付システムへの変更が難しい場合もあるため、複数の解決方法を知っておくことが実務では重要です。

1904年日付システムでマイナス時間を表示する

続いては、1904年日付システムを有効にしてマイナス時間を表示する方法を確認していきます。

1904年日付システムの設定方法

1904年日付システムを有効にするには、Excelのオプションから設定を変更します

「ファイル」タブ→「オプション」→「詳細設定」を開き、「次のブックを計算するとき」セクションにある「1904年日付システムを使用する」にチェックを入れてOKをクリックします。

この設定により、マイナスの時刻値が正しく表示されるようになります。

1904年日付システムでは、日付の基準が1904年1月1日になり、負の値もサポートされます。

これにより、9:00-10:00のような計算結果が「-1:00」と正しく表示されます。

ただし、この設定はブック単位で適用されるため、複数のブックで作業する場合は各ブックで設定する必要があります。

1904年日付システムの設定手順

1️⃣

ファイル→
オプションを開く

2️⃣

詳細設定→
次のブックを計算するとき

3️⃣

「1904年日付システムを使用する」にチェック

A列(開始) B列(終了) 数式 1900年システム 1904年システム
9:00 10:00 =A1-B1 ####### -1:00
14:00 16:30 =A2-B2 ####### -2:30
8:00 17:00 =A3-B3 ####### -9:00
23:00 2:00 =A4-B4 ####### -3:00

1904年システムの注意点

1904年日付システムには重要な注意点があります。

既存のデータがあるファイルで設定を変更すると、すべての日付が4年ずれてしまいます

これは、1900年システムと1904年システムで基準日が異なるためです。

例えば、2024年1月1日という日付が入っているセルは、1904年システムに変更すると2028年1月1日になってしまいます。

このため、1904年システムへの変更は、新しいブックを作成する際に行うか、既存データを他の場所にバックアップしてから行う必要があります。

既に大量のデータが入力されているファイルでは、1904年システムへの変更は現実的ではない場合が多く、後述する数値変換の方法を使う方が安全です。

1904年システム変更の影響

変更前(1900年)

日付: 2024/1/1
時刻: 9:00
時間計算: エラー

変更後(1904年)

日付: 2028/1/1
時刻: 9:00
時間計算: 正常
項目 1900年システム 1904年システム
基準日 1900年1月1日 1904年1月1日
マイナス時間 表示不可(#######) 表示可能
日付のずれ 切替時に4年ずれる
互換性 Windowsの標準 Macの標準(旧)

他のブックとの互換性

1904年システムを使用する際のもう一つの注意点は、他のブックとの互換性です

1900年システムのブックと1904年システムのブックの間でデータをコピー&ペーストすると、日付が4年ずれてしまいます。

このため、組織内で共有するファイルや、テンプレートとして配布するファイルでは、1904年システムの使用は避けた方が無難です。

代わりに、後述する時刻を数値に変換する方法を使えば、1900年システムのままでマイナス時間を扱えるため、互換性の問題を回避できます。

特に、複数の人が編集するファイルや、他のシステムとデータを連携するファイルでは、標準的な1900年システムを維持することが推奨されます。

1904年日付システムは、マイナス時間を扱う最も直接的な解決方法ですが、適用できる状況は限られています。

新規ブックを作成する場合や、時間計算専用のブックを作成する場合には有効ですが、既存データがある場合や他者と共有する場合には不向きです。

業務環境や要件を考慮して、1904年システムを使用するか、他の方法を選択するかを判断する必要があります。

特に、勤怠管理システムなど、時間計算が主目的のブックで、日付データがほとんど含まれない場合は、1904年システムが最適な選択肢となることが多いです。

一方、売上管理など日付と時刻の両方を扱うブックでは、数値変換による方法の方が安全です。

時刻を数値に変換してマイナス計算する

続いては、1900年日付システムのままで、時刻を数値に変換してマイナス計算を行う方法を確認していきます。

時刻に24を掛けて時間単位にする

時刻を数値化する最も一般的な方法は、時刻に24を掛けて時間単位の数値に変換することです

数式は「=(A1-B1)*24」となり、時刻の差を時間数として計算できます。

例えば、A1に9:00、B1に10:00が入っている場合、A1-B1は-0.04166…(シリアル値)ですが、これに24を掛けると-1(時間)になります。

この方法なら、1900年日付システムでもマイナスの時間を数値として扱えます。

結果は時刻形式ではなく数値形式で表示されるため、「-1」「-2.5」のように、時間や小数で表現されます。

-2.5は「-2時間30分」を意味します。

この数値をさらに計算に使用したり、合計したりすることも容易です。

時刻を数値に変換する計算

時刻の引き算
9:00 – 10:00

✖️

24を掛ける
(A1-B1)*24

📊

数値で表示
-1(時間)

A列(開始) B列(終了) =(A1-B1)*24 意味
9:00 10:00 -1 -1時間
14:00 16:30 -2.5 -2時間30分
10:00 9:00 1 +1時間
8:00 17:00 -9 -9時間

TEXT関数で時刻形式に戻す

数値化した時間を再び時刻形式で表示したい場合、TEXT関数を使って書式を整えることができます

数式は「=TEXT((A1-B1)*24,”0.0″)&”時間”」のようになり、「-1.0時間」「-2.5時間」という文字列として表示されます。

ただし、TEXT関数の結果は文字列なので、さらに計算に使用することはできません。

より時刻らしい表示にしたい場合は、HOUR関数とMINUTE関数を組み合わせます。

「=TEXT(ABS((A1-B1)*24),”0″)&”:”&TEXT(MOD(ABS((A1-B1)*24)*60,60),”00″)」という複雑な数式で、「1:00」「2:30」という形式に変換できますが、マイナス記号は別途IF関数で追加する必要があります。

表示形式 数式例 -1.5時間の表示
数値のみ =(A1-B1)*24 -1.5
数値+単位 =TEXT((A1-B1)*24,”0.0″)&”時間” -1.5時間
時:分形式 =TEXT(ABS((A1-B1)*24),”0″)&”:”&TEXT(MOD(ABS((A1-B1)*24)*60,60),”00″) 1:30
記号付き =IF((A1-B1) -1:30

合計計算での活用

数値化した時間は、SUM関数で簡単に合計できます

複数の時間差を集計する際、時刻形式のままでは扱いにくいですが、数値化すれば通常の数値と同じように合計、平均、最大値、最小値などを求められます。

例えば、勤怠管理で毎日の残業時間(予定時刻との差)を計算し、月間合計を求める場合、各日の差を「=(実績-予定)*24」で数値化してから、SUM関数で合計します。

「=SUM(C1:C31)」で月間の残業時間合計(時間数)が得られます。

これを「時間:分」形式で表示したい場合は、「=SUM(C1:C31)/24」として時刻形式に戻し、セルの表示形式を「[h]:mm」に設定します。

時刻を数値に変換する方法は、1904年システムへの変更が難しい環境で最も実用的な解決策です。

既存データに影響を与えず、他のブックとの互換性も保てるため、業務で広く使用できます。

ただし、数値化すると時刻としての視覚的な分かりやすさが失われるため、最終的な表示では工夫が必要です。

分析や計算は数値で行い、レポート表示ではTEXT関数や表示形式で時刻形式に変換するという使い分けが効果的です。

また、この方法は24時間を超える時間の計算にも対応でき、汎用性が高いというメリットもあります。

勤怠管理や工程管理など、時間の集計が重要な業務では、この方法をマスターすることが非常に有用です。

マイナス時間を0にする方法

続いては、マイナスの時間を0に置き換える方法を確認していきます。

MAX関数で0以上にする

時間の差がマイナスになった場合に0として扱いたい場合、MAX関数を使うと簡単です

数式は「=MAX((A1-B1)*24,0)」となり、時間差が正の場合はその値、負の場合は0を返します。

例えば、予定時刻よりも早く終わった場合(マイナスの残業時間)を0として扱いたい場合に有効です。

この方法は、時刻を数値化した後にMAX関数を適用するため、1900年日付システムでも問題なく動作します。

A1に17:00、B1に16:00が入っている場合、(A1-B1)*24は1なので、MAX関数の結果も1になります。

A1に16:00、B1に17:00の場合、(A1-B1)*24は-1なので、MAX関数の結果は0になります。

MAX関数による0への置き換え

正の時間

17:00-16:00
→ 1時間
MAX結果: 1

負の時間

16:00-17:00
→ -1時間
MAX結果: 0
A列(実績) B列(予定) =(A1-B1)*24 =MAX((A1-B1)*24,0)
17:00 16:00 1 1(残業1時間)
16:00 17:00 -1 0(早退扱い)
18:30 17:00 1.5 1.5(残業1.5時間)
16:30 17:00 -0.5 0(早退扱い)

IF関数で条件分岐する

より柔軟な制御をしたい場合、IF関数を使って条件分岐できます

数式は「=IF((A1-B1)*242,2,(A1-B1)*24))」とすれば、マイナスは0、2時間を超える場合は2にキャップするという処理も可能です。

数式 マイナスの扱い 用途例
=MAX((A1-B1)*24,0) 0に置き換え 残業時間計算
=IF((A1-B1)*24 0に置き換え 残業時間計算
=IF((A1-B1)*24 「早退」と表示 勤怠レポート
=IF((A1-B1)*242,2,(A1-B1)*24)) 0~2の範囲に制限 上限付き残業計算

絶対値で時間差の大きさだけを求める

マイナスかプラスかに関わらず、時間差の大きさだけを知りたい場合は、ABS関数を使います

数式は「=ABS((A1-B1)*24)」となり、常に正の値が返されます。

A1とB1のどちらが大きくても、常に時間差の絶対値が得られます。

この方法は、予定との乖離の大きさを評価する場合や、誤差の分析に有効です。

ただし、早いのか遅いのかという方向性の情報は失われるため、別途判定が必要な場合もあります。

方向性も表示したい場合は、別のセルにIF関数で「=IF(A1>B1,”遅延”,”早着”)」のような判定を追加します。

マイナス時間を0にする処理は、業務ルールによって必要性が異なります。

残業代の計算では、マイナス(早退)を0として扱うことが一般的ですが、工程管理では遅延も前倒しも両方とも重要な情報です。

業務要件を正確に理解した上で、適切な処理を選択する必要があります。

また、マイナスを0にする処理は、元のデータを保持したまま別の列で行うことをおすすめします。

元の時間差を残しておくことで、後から分析方法を変更したり、異なる視点でデータを見たりすることが可能になります。

集計用の列と表示用の列を分けるという設計が、柔軟なデータ管理につながります。

まとめ エクセルの時間計算でマイナス表示する・0にする(赤字:24時間:合計など)

エクセルの時間計算でマイナスを扱う方法をまとめると

・1904年日付システムの使用:「ファイル」→「オプション」→「詳細設定」で「1904年日付システムを使用する」にチェック、マイナス時間が「-1:00」のように正しく表示される、既存データがある場合は日付が4年ずれるため注意、新規ブックや時間計算専用ブックに適している

・時刻を数値に変換:「=(A1-B1)*24」で時間差を数値化、1900年システムでもマイナスが扱える、「-1」「-2.5」のように時間数で表示、TEXT関数で「=TEXT((A1-B1)*24,”0.0″)&”時間”」と単位付き表示可能、SUM関数で簡単に合計できる

・マイナスを0にする:「=MAX((A1-B1)*24,0)」でマイナスを0に置き換え、「=IF((A1-B1)*240」に青色を設定してプラスとマイナスを色分け、視覚的に分かりやすいレポート作成

これらの方法を組み合わせることで、様々な時間計算の要件に対応できます。

1904年システムへの変更が可能な環境では直接マイナス表示ができ、変更が難しい環境では数値変換による方法が実用的です。

ただし、時間計算を扱う際は注意が必要です。

業務要件に応じてマイナスの扱いを決定し、元データと計算結果を分けて管理することで、柔軟な分析と正確な集計が可能になります

Excelの時間計算テクニックを適切に活用して、勤怠管理や工程管理の効率化を実現していきましょう!