見出し画像

[EXCEL] 日付(0時)をまたぐ勤務時間が計算できない!22時開始⇒翌1時終了を正しく計算する方法(AI用プロンプト付き)~入力と集計の実践トラブルレスキュー~

2026/8/7 経過時間の計算方法をコンパクトにまとめました。

目次 > 入力・集計の実践トラブルレスキュー 
日付と時間のトラブルレスキュー

プチトラブルよりちょっと深掘りな「中級者向け」。
入力・集計実務の「困った」を5分でサクッと解決!

【まとめ】
日付け(夜中の0時)をまたぐ経過時間を計算する方法を2つ紹介します(日付けをまたがない場合も対応)。

方法1:=IF(終了時刻 < 開始時刻, 終了時刻 + 1, 終了時刻 - 開始時刻)
方法2:=MOD(終了時刻-開始時刻,1)

重要:開始~終了が24時間以上の場合は、これらの方法では計算できません(対応は別記事で)

力技(非推奨):終了時刻を +24して入力する(例 1:00 ⇒ 25:00)

*記事最後にAI用プロンプトがあります。

画像は、本記事を元にGeminiが生成しました



【説明】
日付(夜中の0時)をまたぐ勤務時間を集計したいのに 「22:00〜翌1:00」の計算結果(経過時間)が #### になってしまった・・・。

この「####」はセル幅を変えても「####」の表示のままです

夜勤は勿論、当直や災害対応で24時(夜中の0時)を超える勤務もしばしば発生します。
単純に 「=終了時刻 - 開始時刻」では、負の時間となりエラーになってしまいます。
これ、実務ではよくある“日付またぎトラブル”です。


解決は簡単!
経過時間を出す方法を2つ紹介します。
どちらも終了時刻が開始時刻の「翌日」でも「同日」でも対応します。
ただし、開始~終了が24時間以上(=終了時刻が、開始時刻の翌日の同じ時刻より後)の場合は計算できません。対応方法は別記事をどうぞ

方法1:IF関数を使う(数式は長いが、わかりやすい)

下図あ:「終了時刻」が「開始時刻」と同日なら
終了時刻-開始時刻はプラスになり、計算できます。

下図い:「終了時刻」が「開始時刻」の翌日だと、
終了時刻-開始時刻はマイナスになり、計算できません。
*エクセルはマイナスの時間を扱えない。

そのため、IF関数で「終了時刻」が「開始時刻」より小さいか、判断します。
「終了時刻」>「開始時刻」なら、終了時刻は翌日ですので、終了時刻に1(=24時間)を足します。
そうでなければ、つまり「終了時刻」が「開始時刻」より大きければ、終了時刻から開始時刻を引きます(上の図の数式と同じ)。

=IF(終了時刻<開始時刻,終了時刻+1-開始時刻,終了時刻-開始時刻)

これで、問題なく経過時間が出ます。

この式により、
下図うの「終了時刻が開始時刻と同日」でも、
下図えの「終了時刻が開始時刻の翌日」でも計算できます。


補足説明:エクセルは24時間を1で表す

エクセルは、1日(24時間)を「1」という数値として扱います。
日付(例 6/8)や時刻表(例 22:00 ) のままでは計算できないため、「数値(シリアル値)」に変換しています。
数値にすることで日数や経過時間の計算が可能になるのです。

1日(24時間)を「1」とするため、時刻は24で割った値として扱われます。
3:00  ⇒ 3/24 ⇒0.125
22:00 ⇒ 22/24 ⇒ 0.91666…
時刻によっては割り切れませんが、そこはEXCEL内部で調整されています。

方法1のメリット・デメリット

メリット
・式が分かりやすい。IF関数を理解できていれば、数式の意味も理解できる(はず)。

デメリット
・数式が長くなる。
・IFによる条件分岐が理解できないと、数式の意味が理解できない。
・24時間以上の経過時間は正しく出せない。


方法2:MOD関数を使う(数式は短いが、理解が難しい)


MOD関数を使うと、以下で計算できます。

=MOD(終了時刻-開始時刻,1)

MOD(〇,数値)は、「〇」を数値で割った答え(整数)の「余り」を出します。

ただし、余りが負の値の場合は、1を足して正の値になります。

お:=MOD(22:00-19:00,1) = 3:00
か:=MOD(1:00-22:00,1) = 3:00
となりますが、実際はシリアル値(数値)で計算されています。

MOD関数は余りを出す数式です。

MOD関数の計算過程を、INT関数(小数点以下切り捨て)を使って分解してみます。
ただし、以下の説明は理解しなくても構いません。

上図き:
=MOD(C17-B17,1) は、C17-B17を1で割った余り(小数点以下)を取り出す。
⇒(C17-B17)/1から、C17-B17/1の整数の値を引けばいい
=(C17-B17)/1-INT(C17-B17)/1 
=0.125/1-INT(0.125)/1=0.125-0=0.125 ⇒3:00

上図く:
=MOD(C18-B18,1) は、C18-B18を1で割った余り(小数点以下)を取り出す。
⇒(C18-B18)/1から、C18-B18/1の整数の値を引けばいい
=MOD(C18-B18,1) は、C18-B18を1で割った余りを出す。
=(C18-B18)/1-INT(C18-B18)/1 
=(0.04167-0.91667)-INT(0.91667-0.125,1)
=-0.875/1-INT(-0.125)/1=-0.875-(-1) =-0.875+1 ⇒ 0.125⇒3:00


補足説明
INTは小数点以下を取り去ったうえで「より小さい整数」にします。
1.2 ⇒ 1 (1.2より小さい整数 ⇒1)
‐1.2⇒ -2(-1.2より小さい整数 ⇒ 2)
従って、終了時刻が開始時刻の翌日(終了時刻<開始時刻)の場合は、終了時刻-開始時刻はマイナスになり、かつ、0から-1の間(24時間=1より小さくなるため)なので、INT関数を使うと、必ず-1になります。
-1を引くので、結果として1を足すことになります。
*くどいですが、この部分、理解は不要です。


方法2(MOD関数)のメリット・デメリット

メリット
・数式が短い

デメリット
・数式の意味が理解しづらい(理解しようとすると樹海入り?)
・方法1同様、24時間以上の経過時間は正しく出せない。。


使い分けの例(引き継ぐか否か、も判断材料の一つ)

・引き継ぐ予定がある場合、特に修正が予想されるの場合(=数式の理解が必要な場合):方法1
・引き継ぐ予定がない、または、引き継いでも修正する可能性が低い場合(=数式を理解しなくてもいい場合):方法2

注意:時間表示は [h]:mm にしておくと安心

方法1(IF)も方法2(MOD)も、どちらも「24時間以内の経過時間」しか扱えません(24時間以上の対応は別記事で解説)。
ただし、今後 24時間以上の経過時間を扱う可能性がある場合に備えて、表示形式は h:mm を[h]:mm にしておくと安全です。
*h を [ ] で囲む。
[h]:mm にしておけば、24時間を超える時間も正しく表示できます。
詳しい方法は以下の記事をどうぞ(1分で読めます)。

[EXCEL] 24時間以上の時間が表示できない!原因と 表示形式([h]:mm)で解決する方法 ~プチトラブルレスキュー~


注意2:終了時刻が翌々日以降だと計算できない


上述のとおり、方法1も方法2も、終了時刻が開始時刻の24時間以上の場合は正しく計算できません(力技編は頑張ればできますが、現実的ではない)。
実務では、機械の稼働時間や、障害の継続時間など、継続時間が複数日に渡る場合もあります。
24時間以上の経過時間を扱う場合は、以下の記事で詳しく解説しています。

[EXCEL] 開始から終了まで複数日(24時間以上)に渡る経過時間はどう出す? 日付けと時刻を分けて入力して合体!(AI用プロンプト付き) ~入力と集計の実践トラブルレスキュー~


おまけ1:力技編(非推奨)

日をまたぐ経過時間を、関数を使わず、数式だけで計算する方法もあります。
終了時間を頭の中で変換し、24時間を足してしまうのです。
例:終了が1:00なら「25:00」にする。

こうすれば、終了時刻>開始時刻になるので、計算できます。
ただし、「25:00」と入れても、上図のように「25:00:00」と秒まで表示される場合があります。
[h]:mm:ss の表示形式になっているので、:ss を削れば 秒表示は出ません。

この方法、「非推奨」です。
なぜか?
頭で考えて時刻を変換して入力するので、面倒かつ間違いが起きるから。
1:00ならすぐに25:00と出ても、5:30なら? 8:14なら?
考えて入力する分、時間も掛かり、間違いにも繋がります。
この方法は、結局、IF関数を使う「方法1」を、人間が頭で計算しているのと同じです。ならば、数式に任せた方が楽かつ間違いも起きません。

ただ、この「力技」、実務の現場では、意外とやりがち。
「とりあえず計算できればいい」場面なら、使ってもいいでしょう。
でも、「仕組み」として、共有・長期運用するファイルなら避けましょう。

おまけ2:SNS で見る MOD+TEXT 方式は「非推奨」

インスタのリールなどで、次の数式が紹介されることがあります。

=TEXT(MOD(終了時刻-開始時刻,1),"h:mm")

これは「方法2」の応用ですが、避けた方がいいでしょう。
なぜか?
TEXT関数は、数値を文字列(文字データ)にする関数です。
方法2で出た答え(数値)が文字列になると、その先の計算には使えなくなります。

あえて文字列として使いたいとき(例:ワードへの差し込み用)以外は、避けましょう。


おまけ3:生成A用プロンプト

この記事の内容を AI に説明させたい場合、あるいは実際に数式を作るなら、次のプロンプトをどうぞ。生成AIの説明で、より理解が深まると思います
*「 」内は適宜変えてください。


・エクセルで「B2」に開始時刻,「C2」に終了時刻を入れ、「C3」に経過時間を出したい。終了時刻は開始時刻の翌日になる場合がある。

・IF関数とMOD関数の両方の方法を示して。




お役に立ったら♡を是非!(アカウント不要)。励みになります。 &フォローしておくと必要なときにすぐ見つかって便利です。

軽めのトラブルはこちらをどうぞ
「プチトラブルレスキュー」シリーズ 一覧記事


いいなと思ったら応援しよう!