メインコンテンツへスキップ
見出し画像

[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関数の両方の方法を示して。




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

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


    あなたへのおすすめ