スプレッドシート

【簡単】スプレッドシートの時間計算・引き算方法(24時間超え・時給計算用)

スプレッドシートで労働時間や作業時間を計算するとき、「退勤時間から出勤時間を引き算するだけだから簡単!」と思っていませんか?実は、単純に引き算をしただけなのに、エラーが表示されたり、思っていたのとは違うおかしな数値が出てきて頭を抱えてしまう方がとても多いのです。

特に、24時間を超える合計時間や、深夜をまたぐシフトなどの引き算では、スプレッドシート特有の「時間のルール」を知らないとスムーズに計算できません。この記事では、時間計算でつまずきがちなポイントをスッキリ解決できるよう、基本からわかりやすく解説していきますね。

  • スプレッドシートの時間計算の基本は単純な引き算「退勤時間-出勤時間」で求められる
  • 時間の正体は「シリアル値」という24時間を「1.0」とする特殊な数値である
  • 計算結果がおかしいときはセルの「表示形式」が原因になっていることが多い
  • 時給計算など次の計算につなげるためには「シリアル値」を普通の数値に直す必要がある

スプレッドシートにおける時間データ(シリアル値)の仕組みと基本の引き算

スプレッドシートで時間の計算をマスターする第一歩は、数式を覚えることではなく、スプレッドシートが「時間をどのように裏側で処理しているか」を知ることです。この仕組みを少しだけ頭に入れておくだけで、エラーが出たときの対処がグッと楽になりますし、応用的な計算もスラスラできるようになりますよ。まずはその基本となる仕組みと、もっともシンプルな引き算の手順を順番に確認していきましょう。

スプレッドシートの時間データ(シリアル値)とは?

普段、私たちがセルに「9:00」や「12:00」と入力すると、スプレッドシートはそれをただの文字列ではなく「時間」として認識してくれます。しかし、スプレッドシートの裏側では、私たちが目にする時間表記ではなく、「シリアル値」と呼ばれる特別な数値に変換して管理されているのをご存じでしょうか?

スプレッドシートにおけるシリアル値とは、「1日(24時間)を『1.0』とする数値」のことです。つまり、24時間が「1」なので、その半分の12時間は「0.5」、6時間は「0.25」といった具合に、時間はすべて小数で表されるルールになっています。ちょっと不思議な感じがするかもしれませんが、これがスプレッドシートの時間の正体なのです。

イメージしやすいように、いくつかの時間をシリアル値に置き換えてリストにしてみました。ぜひ参考にしてみてくださいね。

  • 24時間 = 1.0
  • 18時間 = 0.75
  • 12時間 = 0.5
  • 6時間 = 0.25
  • 1時間 = 1 ÷ 24 = 約0.04167
  • 1分間 = 1 ÷ 1440 = 約0.000694

例えば、あなたがセルに「9:00」と入力した場合、スプレッドシートの内部では自動的に 0.375(9時間 ÷ 24時間)という小数が保存されています。同じように「18:00」なら 0.75(18時間 ÷ 24時間)になります。

このシリアル値の仕組みがあるからこそ、スプレッドシートは「18:00 - 9:00」を内部的に「0.75 - 0.375」という小数の引き算として処理し、その結果である「0.375」を再び「9:00」という時間の見た目に変換して表示してくれているのですね。

「本当にそうなっているのかな?」と気になった方は、時間が入っているセルの表示形式を「数値」に変えてみてください。メニューの「表示形式」>「数字」>「数値」をクリックすると、一瞬で「0.375」などの小数に変わるはずです。確認が終わったら「表示形式」>「数字」>「時間」に戻せば、いつもの見慣れた時間表記に戻りますよ。このシリアル値の概念は、時間計算で発生するエラーを解決する上でとても重要な知識になるので、ぜひ頭の片隅に置いておいてくださいね。

Googleスプレッドシートで時間の表示形式を数値に変更してシリアル値を確認する様子

基本手順:単純な引き算(退勤時間 - 出勤時間)で勤務時間を算出する

シリアル値の仕組みがわかったところで、さっそく実際に手を動かして時間を計算してみましょう!まずは、同じ日の中で完結する、最もシンプルで基本的な「勤務時間の計算」からスタートします。

ここでは、以下のような表を例にして解説しますね。

社員名 出勤時間(A列) 退勤時間(B列) 実働時間(C列)
山田さん 9:00 18:00 ここに数式を入力

この表で山田さんの「実働時間」を求めたい場合、計算式はとてもシンプルです。退勤時間が入っているB列から、出勤時間が入っているA列を引き算すれば良いだけなので、C2セルには次のように入力します。

入力する数式:
=B2-A2

数式を入力してエンターキーを押すと、C2セルには「9:00」(9時間)と正しく表示されます。これで基本の引き算はばっちりです!「なんだ、本当に簡単じゃないか」と思うかもしれませんね。しかし、ここにはスプレッドシートならではの「表示形式の落とし穴」が潜んでいることがあります。

時々、数式を入力したのに「9:00」ではなく「0.375」という小数のまま表示されてしまうことや、全然関係のない「1900/01/00 9:00:00」といった日付のような表示になってしまうトラブルが発生します。これはスプレッドシートが数式の結果をどの表示形式で画面に見せるか迷ってしまったために起こる現象です。

もし思った通りの時間形式にならなかったときは、慌てずに次の操作を試してみてくださいね。

時間表示がおかしいときの修正手順:

  1. おかしな表示になっているセル(今回の場合はC2セル)を選択する
  2. 上部メニューの「表示形式」をクリックする
  3. メニューから「数字」にカーソルを合わせる
  4. さらに展開されるリストの中から「時間」を選択する

この操作を行うことで、スプレッドシートに「このセルはシリアル値ではなく、時間の形式で表示してね」と正しい指示を与えることができます。これだけで、小数の表示が綺麗に「9:00」に直りますよ。Googleスプレッドシートの公式ヘルプでも、数値や時間の書式設定について詳しく解説されています(詳細はGoogle Docs Editors Help - 数値、日付、通貨の書式設定をご参照くださいね)。

もしデータが多くて動作が重く感じるときは、スプレッドシートの設定自体を見直すのもおすすめです。データ処理の効率化については、こちらのスプレッドシートを軽くする解決策で詳しく解説していますので、数式をたくさんコピーして動作が遅くなってしまったときはぜひ読んでみてくださいね。

Googleスプレッドシートで退勤時間から出勤時間を引き算する数式を入力している画面

さて、ここまでは非常に順調でしたが、実際の仕事では「休憩時間を引き算したい」「24時間を超える残業や合計時間を計算したい」「深夜をまたいで翌日になった場合の引き算はどうするの?」といった、少し複雑なパターンが出てきますよね。それぞれの状況に応じて、計算方法を工夫する必要があります。

時間計算をするときに、どのような選択肢があるのかを大まかに把握できるように、よく使われる計算方法の比較表をまとめてみました。今のあなたの状況にどの方法が最適か、見比べてみてください。

計算方法 具体的な数式例 メリット・特徴 デメリット・注意点
単純な引き算 =B2-A2 一番シンプルで分かりやすい。シリアル値のまま他のセルにコピーして使える。 24時間を超える合計時間や、深夜をまたぐ日跨ぎの引き算に対応しにくい。
表示形式の変更([h]:mm) =B2-A2
(表示形式をカスタム時間枠で「[経過時間(時間)]:分」にする)
合計が24時間を超えても「28:30」のように正しく表示できる。 数式そのものは単純な引き算と同じだが、事前の表示形式の設定が必須になる。
数値(時間数)への変換 =(B2-A2)*24 「8.5時間」のように小数に変換されるため、時給掛け算などの給与計算に直結できる。 セルの表示形式を「時間」ではなく「数値」に直さないと、変な時間表示になってしまう。

このように、単純に時間を引き算するだけでも、その後の用途や状況(24時間を超えるか、時給計算に使うかなど)によって最適なアプローチが異なります。まずは「シリアル値」の基本と「単純な引き算」のやり方をしっかりマスターした上で、より複雑な応用テクニックへと進んでいきましょう。

「24時間超え」の合計時間を正しく表示するカスタム表示形式の設定

スプレッドシートで毎日の勤務時間やプロジェクトの作業時間を計算し、最後に「よし、今月の合計時間を出そう!」とSUM関数を使って集計したときに、頭を悩ませるのが「合計時間がどう考えても少なすぎる」というトラブルです。例えば、明らかに合計で30時間以上は稼働しているはずなのに、セルには「6:00」としか表示されていない……なんて経験はありませんか?計算ミスを疑って数式を何度も見直したけれど間違いは見当たらない、そんなときはスプレッドシートの「時間表示のルール」が原因です。

日常のスケジュール管理であれば、時間は24時間でリセットされて翌日の午前0時に戻るのが自然ですが、勤務時間の集計やプロジェクトの工数管理などでは、24時間を超えてもそのまま累積した合計時間を表示してほしいですよね。実は、スプレッドシートは内部で正しく計算を行っているのですが、標準の表示設定のせいで私たちの目に見える数字がおかしくなっているだけなのです。そこで今回は、この「24時間超え問題」の原因と、それを一瞬で解決できる「カスタム表示形式」の設定方法について詳しく解説します。手順自体は非常にシンプルなので、一度覚えてしまえば次からは迷わずに設定できるようになりますよ。

スプレッドシートの時間計算における退勤時間と出勤時間の引き算と基本設定

問題点:合計時間が24時間を超えると「時間表示が0に戻ってしまう」現象

まずは、なぜ合計時間が24時間を超えた途端に「表示がおかしくなる(0に戻ってしまう)」のか、その仕組みについて少し深く掘り下げてみましょう。仕組みを理解しておくと、今後似たような表示のトラブルが起きたときにも焦らずに対応できるようになりますよ。

GoogleスプレッドシートやExcelなどの表計算ソフトでは、日付や時間を「シリアル値」という数値で管理しています。このシリアル値の考え方では、「1日(24時間)」を数値の「1.0」として扱います。つまり、24時間を基準として、それより短い時間は「1未満の小数」で表現されているわけですね。例えば、半日である12時間は「0.5」、6時間は「0.25」、1時間は「1÷24」で「約0.0417」となります。

そして、スプレッドシートのデフォルト(初期状態)でよく使われる時間の表示形式(「13:00」や「hh:mm」など)は、基本的に「時刻(1日のうちの何時何分か)」を表示するためのルールになっています。時計の針をイメージしてもらうと分かりやすいのですが、時計は夜の12時(24:00)を過ぎると午前0時(0:00)にリセットされて新しく時を刻み始めますよね。スプレッドシートの通常の時間表示もこれと全く同じ動きをします。

そのため、時間の引き算や足し算を行って、内部的な合計値が24時間を超えると、自動的に「24時間の倍数」が切り捨てられ、24で割った余りの「端数の時間」だけが表示されるようになってしまうのです。

具体的な例をいくつか見てみましょう。

  • 計算上の合計が「24時間」の場合:24で割ると余りは0なので、表示は「00:00」になります。
  • 計算上の合計が「25時間」の場合:24時間を引いた余りの1時間分だけが残り、表示は「01:00」になります。
  • 計算上の合計が「48時間」の場合:24時間のちょうど2日分なので、余りは0となり、表示は「00:00」になります。
  • 計算上の合計が「50時間30分」の場合:48時間(2日分)を引いた余りが2時間30分なので、表示は「02:30」になります。

このように、表示がリセットされてしまっているだけで、実はセルに入っている内部的なデータ自体は正しく計算されています。SUM関数などの数式をいくら書き換えても解決しないのは、数式の計算結果(シリアル値)自体は「1.0416...(25時間)」や「2.1041...(50.5時間)」と正しく出ているのに、見え方(フォーマット)だけが時計盤の表示になってしまっているからなのです。

この仕様は、表計算ソフト全体の共通仕様です。Googleの公式な説明でも、時間の取り扱いに関するルールとして紹介されています。ですので、私たちがやるべき対策は、数式の修正ではなく、スプレッドシートに対して「これは『時刻』ではなく、合計した『経過時間』として見せてね」と設定を変更してあげることになります。その具体的な解決手順を次のセクションでステップバイステップで確認していきましょう。

解決策:表示形式の詳細設定から経過時間「[h]:mm」を設定する

それでは、合計時間を24時間超えに対応した「経過時間(累積時間)」の形式に変更する具体的な設定手順を解説します。操作はマウスとキーボード入力で簡単に行えますので、手元のシートを見ながら順番に進めてみてくださいね。

【24時間超え表示への切り替え手順まとめ】

  1. 合計時間が入力されているセル(または範囲)を選択する
  2. メニューバーの「表示形式」>「数字」>「カスタム数値形式」の順にクリックする
  3. 入力欄に「[h]:mm」と半角で入力する
  4. 「適用」ボタンをクリックする

ここからは、各手順のポイントをより詳しく説明していきますね。

ステップ1:変更したいセルを選択する

まずは、SUM関数などで合計時間を計算しているセルをクリックして選択します。もし、複数のプロジェクトやメンバーの合計時間が縦や横に並んでいる場合は、それらのセルをドラッグしてまとめて範囲選択しておくと、一括で表示形式を変更できるので作業がスムーズですよ。

ステップ2:「表示形式」メニューから「カスタム数値形式」を開く

セルを選択した状態で、スプレッドシート画面の最上部にあるメニューバーから「表示形式」をクリックします。ドロップダウンメニューが表示されたら、上から2番目あたりにある「数字」にカーソルを合わせます。さらに右側に数字のフォーマット一覧が表示されるので、そのメニューを一番下までスクロールして、「カスタム数値形式」をクリックしてください。

ステップ3:カスタム書式を入力する

「カスタム数値形式」のダイアログボックス(設定画面)がポップアップで表示されます。画面上部に文字を入力できる細長い入力欄がありますので、もし最初から何か文字が入っている場合は一度それをきれいに消去してください。その後、以下の通りに半角英数字で入力します。

[h]:mm

もし、秒単位までしっかりと表示させたい場合は、以下のように入力してください。

[h]:mm:ss

ここで使っている「 [h] 」の大カッコ(ブラケット)が、今回の最も重要でマジックのような役割を果たす記号です。スプレッドシートにおいて、大カッコで囲まれた「h」は「時刻の『何時』でリセットせず、経過した合計時間をそのまま繰り越して表示する」という特別な命令になります。これによって、24時間を超えても「24時間、25時間、26時間……」と無限に足し算された時間がそのまま表示されるようになります。

ステップ4:「適用」をクリックして確定する

入力欄に正しく「[h]:mm」が入っていることを確認したら、右下にある青い「適用」ボタンをクリックします。これでダイアログが閉じ、選択していたセルの表示が「28:30」などの正しい累計時間に切り替わっているはずです。とても簡単ですよね!

さらに便利に!応用的なカスタム表示パターン

このカスタム数値形式は、自分の好みに合わせて表記をアレンジすることも可能です。よく使われる便利なアレンジパターンをいくつか紹介しますね。

知っておくと便利な時間表示のアレンジ

  • 日本語表記にする:[h]時間mm分

    セル内の表示を「28時間30分」のように、日本語の単位付きに変更できます。社外向けの資料や、時間の計算に詳しくないメンバーとシートを共有するときに、一目で何の時間か伝わるため非常に親切な表示方法ですよ。

  • 常に2桁で表示する:[hh]:mm

    大カッコの中の「h」を2つにして「[hh]:mm」と書くと、例えば合計が5時間の場合に「5:00」ではなく「05:00」のように、十の位に「0」を補って表示してくれます。縦にセルが並んでいるときに、桁数が揃うので見た目が美しく整う効果があります。

  • 分単位だけで累積表示する:[m]分

    「h」の代わりに「m」を大カッコで囲んで「[m]」とすると、時間をすべて分に換算して表示してくれます。例えば、「1時間20分」のデータを「80分」のように表示させたい場合に非常に便利です。

うまく表示されないときのトラブルシューティング

もし上記の手順通りに設定したのに、合計時間が正しく表示されなかったり、エラーが表示されたりする場合は、以下のポイントをチェックしてみてください。

チェック1:入力データが「文字列(テキスト)」になっていないか

最もよくある原因がこれです。計算元となる出勤時間や退勤時間のセルに、手入力で「9時00分」や「18:00(全角)」のように入力されていたり、不要なスペースが紛れ込んでいたりすると、スプレッドシートはそれを「数字(時間)」ではなく「ただの文字」として認識してしまいます。文字列は足し算や引き算の計算対象にならないため、SUM関数が正しく動作せず、合計が0時間になったりエラーになったりします。

確認方法として、セルの中の文字がデフォルトで「左寄せ」になっていたら、それは文字列として扱われています(数値データは通常、自動で「右寄せ」になります)。時間は必ず半角のコロンを用いて「9:00」や「18:00」のように入力するルールを徹底しましょう。

チェック2:計算元のセル自体にエラーが含まれていないか

合計の範囲内に、一つでも「#VALUE!」や「#DIV/0!」といったエラーが出ているセルがあると、SUM関数の結果もエラーになってしまいます。引き算の数式が入っている各行をスクロールして確認し、エラーになっている箇所がないか確かめてみてください。

チェック3:シートの動作が重い場合の対策

もし、何百行もの勤怠データに対して複雑な時間の計算や合計処理を行っていると、スプレッドシートの処理速度が落ちて再計算に時間がかかることがあります。もし動作が重いなと感じたら、不要な計算行を整理したり、計算の仕組みを見直したりすることをおすすめします。スプレッドシートを快適に使いこなすためのヒントとして、こちらのスプレッドシートを軽くする解決策の記事も非常に役立ちますので、ぜひ参考にしてみてくださいね。

いかがでしたでしょうか?24時間を超える時間の合計計算は、最初は表示がリセットされて戸惑うことが多いですが、この「[h]:mm」のカスタム数値形式さえ知っていれば、一瞬で解決できる問題です。日々の業務効率化や、ミスなくスマートな勤怠管理シートを作るためにも、ぜひこの設定を活用してスプレッドシートを使いこなしていきましょう!

時間を十進法の数値(8.5時間、510分)に変換する掛け算テクニック

スプレッドシートで出退勤の時間を管理し、その時間差から勤務時間を求めたあと、「さあ、これで給与の計算をしよう!」と時給を掛け算したときに、あまりにもおかしな計算結果になって焦ったことはありませんか?たとえば、勤務時間が「08:30」(8時間30分)で、時給が「1,200円」だったとします。普通の掛け算の感覚なら「10,200円」になるはずですが、数式で単純に掛け合わせると、なぜか「425円」といった、ジュース数本分にも満たないような不思議な金額になってしまうのですよ。

実はこれ、スプレッドシートで時間を扱う際の「もっとも代表的な落とし穴」と言えるトラブルなのです。なぜこのようなことが起きるかというと、スプレッドシートの内部システムでは、時間はすべて「24時間(1日)= 1.0」とする「シリアル値」という小数で処理されているからなんですね。つまり、「08:30」という時間は、画面上の見た目はそうであっても、中の実体データとしては「8.5時間 ÷ 24時間 = 0.354166...」というとても小さな小数値になっています。そのため、この小数に時給の「1200」をそのまま掛け算してしまうと、「0.354... × 1200 = 425円」という結果が算出されてしまうわけです。

このトラブルを乗り越えるためには、時間形式のデータを「8.5時間」や「510分」といった、私たちが普段の掛け算で使い慣れている一般的な「十進法の数値」へと変換する手順が必要です。今回は、時間データをスピーディーに普通の数値に変換して、時給計算やタスクの進捗集計などにそのまま活用するための掛け算テクニックを解説しますね。

スプレッドシートで求めた時間データを十進法の数値に変換して時給計算などを行う応用例

テクニック1:時間データに「24」を掛け算して「〜時間(十進法)」に変換する

スプレッドシートで算出した「08:30」などの時間差データを、「8.5」という普通の数値(十進法)に直すためには、時間差の計算結果に「24」を掛け算するのがもっともシンプルかつ強力なアプローチですよ。なぜ「24」を掛けるかというと、先ほどお話しした通り、スプレッドシートの時間データは「1日=1」の単位だからです。1日は24時間ですから、24を掛けることで単位を「日」から「時間」へと正しく引き上げることができるのですね。

それでは、具体的な計算手順と注意点を順を追って確認してみましょう。たとえば、A2セルに「出勤時間(09:00)」、B2セルに「退勤時間(17:30)」が入っているとしますね。

【十進法の時間数値に変換する手順】

  • 労働時間を表示させたいセル(C2セルなど)に、まず =(B2-A2)*24 という数式を入力します。時間差の引き算を先に行う必要があるので、引き算の部分を必ず丸括弧 ( ) で括ることが大きなポイントですよ。
  • 数式を入力した直後は、セルの表示が「12:00」などの時間形式のままになってしまい、「えっ、掛け算したのにおかしいな?」と驚くことがあります。これは、スプレッドシートが気を利かせて「時間データを含んだ計算結果だから、時間表示のままにしておこう」と自動判別していることが原因です。
  • この状態を直すために、該当するセルの表示形式を「数値」に変更します。メニューバーの「表示形式」>「数字」>「数値」(あるいは「書式なしテキスト」)を順に選択してみてくださいね。
  • すると、表示が「08:30」から求めていた「8.5」という十進法の数値にきれいに切り替わりますよ!

こうして「8.5」という通常の数値になれば、あとはその数値に対して時給(たとえば1,200円)を単純に掛け算するだけで、正しい給料額「8.5 × 1200 = 10,200円」を計算することができますよ。計算の組み立てを整理すると、以下の表のようになります。

出勤 (A) 退勤 (B) 時間差(表示形式:時間) 時間差×24(表示形式:数値) 時給 総支給額(掛け算結果)
09:00 17:30 08:30 8.5 ¥1,200 ¥10,200
【ここが重要!表示形式のリセット】
スプレッドシートのセルに「24」を掛け算した数式を入れた後は、セルの表示形式を必ず「数値」や「自動」に設定し直す必要があります。もし時間表示のままだと、8.5という数値が「12:00(8.5日分の日数から端数の時間を割り出した表示)」などになってしまうため、画面上の値が全く意味のわからないものになってしまいますよ。思ったような数値にならないときは、まず表示形式のメニューを確認してみてくださいね。

テクニック2:時間データに「1440」を掛け算して「〜分」に変換する

次に、勤務時間や作業にかかった所要時間を「時間」ではなく、すべて「分」単位の数値に統一して集計・管理したい場合の方法について見ていきましょう。たとえば、作業時間である「1時間30分」を「90分」という扱いやすい数値にして、生産性を分析したり通話料金を算出したりしたいケースですね。

この場合には、時間差の計算結果に「1440」を掛け算することで、一挙に「分」ベースの数値に変換することができますよ。なぜ「1440」という少し大きな数字を使うのかというと、1日は24時間で、1時間は60分だからです。これを掛け合わせると「24時間 × 60分 = 1440分」になります。つまり、1日は1,440分というわけですね。シリアル値(1日=1.0)に対して1440を掛け合わせることで、データ単位が「日」から「分」にダイレクトに切り替わりますよ。

こちらも実例で確認してみましょう。C2セルに開始時間、D2セルに終了時間が入っているとします。

【分換算の数値に変換する手順】

  • 所要時間を「分」で表示させたいセルに、 =(D2-C2)*1440 という数式を入力します。引き算を先に処理するために、括弧 ( ) で囲むことを忘れないでくださいね。
  • 先ほどのケースと同じように、入力直後はスプレッドシートの自動判別によって時間形式で表示されてしまう場合があるため、セルの表示形式を「数値」や「自動」に変更します。
  • 表示形式を直すと、画面上の「01:30」という時間データが、すっきりと「90」という数値に変換されますよ。

この「分」への変換テクニックは、業務改善の現場やコールセンターの対応時間分析などで大活躍します。たとえば、対応時間の単価が1分あたり50円と決まっているサポート業務であれば、`90分 × 50円 = 4,500円` というように、変換後の数値を使えば掛け算だけで簡単にコスト計算が行えるようになりますね。

【お役立ちメモ】さらに細かい「秒」に変換したい場合
もし、さらに高精度なアクセス解析やシステムログ、ゲームのクリアタイムなどを「秒」単位の数値にして集計したい場合はどうすれば良いでしょうか?
答えは、1分が60秒であることから、1440にさらに60を掛け合わせた「86400」(24時間 × 60分 × 60秒)を時間差に掛けてあげればOKですよ。=(終了-開始)*86400 という数式を入力し、表示形式を数値に設定するだけで、細かい秒数の集計作業も一瞬で自動化できますよ。

テクニック3:深夜勤務などのマイナス時間(日付またぎ)をIF関数やMOD関数で処理する

シフト管理や勤務表の作成で多くの人を悩ませるのが、22:00(出勤)から翌朝の05:00(退勤)といった、「日付をまたぐ時間計算(深夜勤務など)」における計算エラーのトラブルです。これらを単純に 05:00 - 22:00 と引き算してしまうと、スプレッドシートの中では小さい値から大きい値を引くことになり、結果がマイナス(負の数)になってしまいます。

日付を含まない単なる「時刻」のデータでマイナスの計算が発生すると、スプレッドシートはエラーを起こしてセルの表示が `###` になってしまったり、正しくない時間差を割り出してしまったりします。この日付をまたぐ時間計算のズレを綺麗に補正するために、実務でよく使われる2つの関数テクニックをご紹介しますね。それぞれに異なる特徴があるので、お好みの方法を選んでみてください。

【アプローチA:IF関数を使って日付またぎを条件分岐する】
もっとも論理的でわかりやすいアプローチが、IF関数を使って「もし退勤時間が出勤時間より小さかったら、日付をまたいだと判定して24時間分(シリアル値における1)を足す」という条件を作る方法です。

数式は以下のようになります(A2セルが出勤、B2セルが退勤の場合)。
=IF(B2>=A2, B2-A2, B2-A2+1)

この数式は、「退勤時間 ≧ 出勤時間」のときは通常通りの「退勤 - 出勤」を行い、そうではない(退勤のほうが数値として小さい、つまり日付をまたいで夜を越えた)ときは「退勤 - 出勤 + 1」を実行するという仕組みになっています。スプレッドシートの単位において「1」は「24時間」を表すため、これを足すことでマイナスにならずに正しい時間差(7時間)をスムーズに求めることができるのですね。直感的に理解しやすい数式なので、初めてシフト表を作る方にもおすすめですよ。

【アプローチB:MOD関数を使って数式をスマートに一発解決する(おすすめ!)】
もう一つの方法が、割り算の「余り(余剰)」を求めるためのMOD(モッド)関数を利用するテクニックです。こちらは、アプローチAのIF関数を使う方法に比べて数式が非常に短くすっきりするため、スプレッドシートに慣れた上級者やプロの現場で特によく使われている方法ですよ。

必要な数式は、これだけです。
=MOD(B2-A2, 1)

「えっ、どうしてこれだけで日付またぎの計算ができるの?」と不思議に感じる方も多いと思います。MOD関数は通常、割り算の余りを算出する関数ですが、スプレッドシートのMOD関数には「負の数を割った場合、結果が必ず正の数(プラス)の範囲で調整される」という数学的な特性があります。
たとえば、05:00 - 22:00 は `-17時間`(シリアル値で約 `-0.7083`)になりますが、これを `1` で割った余りを求めると、システム内で自動的に `-0.7083 + 1 = 0.2917`(7時間分)と、プラスに補正された余りが出力されるのです。一方で、日付をまたがない通常の 17:00 - 09:00 = 8時間(シリアル値で約 `0.3333`)の場合は、0.33331 で割った余りはそのまま 0.3333(8時間分)となります。
このように、MOD関数を使うだけで、日付をまたいでいるかどうかの条件分岐をスプレッドシートが背後で自動的に処理してくれるのですね!数式がとても短くなるので、視認性も高くなりミスの削減にもつながりますよ。

MOD関数の詳しい仕様や基本的な使い方のルールについては、Google公式のヘルプページ(Google ドキュメント エディタ ヘルプ: MOD 関数)でも紹介されていますので、動作の詳細をじっくり確認したいときはぜひ参照してみてくださいね。

【ここに注意!】24時間を超えて連続勤務する場合には使えません
IF関数やMOD関数(+1するテクニック)で日付またぎに対応できるのは、あくまで「24時間未満の勤務で、日付のまたぎが1回だけ」である場合のみです。もし「24時間を超えて丸2日間ずっと作業していた」というような、差分が1日を超えるケースでは、時間の値だけで計算を完結させることはできません。そのような場合は、セルに入力するデータを時刻だけではなく、「2026/06/16 09:00」のように日付と時刻がセットになった「日時データ」として入力したうえで、単純に引き算を行うようにしましょうね。

出退勤や勤務時間などの集計シートは、従業員や作業スタッフの数が増えるほど大量の行データになりますよね。もし、非常に巨大なスプレッドシートでIF関数やMOD関数を何千行、何万行にもわたって詰め込んでしまうと、ファイルの再計算処理に膨大なリソースがかかり、シート全体の動作が非常に重くなってしまうことがあります。

もし「数式を増やした途端に、スクロールがカクついたりセルの入力に数秒待たされたりするようになった……」とお悩みでしたら、こちらのスプレッドシートを軽くする解決策の解説ページをあわせて確認してみてくださいね。無駄な再計算を減らして、シートの読み込みスピードを快適にするためのちょっとした設定テクニックを紹介していますよ。

日付またぎの計算は一見複雑そうですが、MOD関数のルールを理解してしまえば、誰でも美しく短い数式で解決することができます。あなたのシートのデザインや作業内容に応じて、IF関数とMOD関数を使いこなしてみてくださいね。

スプレッドシートの時間計算に関するよくある質問(FAQ)

スプレッドシートで時間の引き算や計算を行っていると、「思った通りの結果にならない」「エラーが出て進まない」といったトラブルに直面することがよくありますよね。特に夜勤をまたぐ計算や、他のツールへのデータ連携でエラーが起きると、せっかくの効率化が台無しになってしまいます。ここでは、時間の引き算で特につまずきやすいポイントと、そのスマートな解決策を分かりやすく解説しますね。

Q1:引き算結果が「#NUM!」エラーになってしまう原因と対策は?

スプレッドシートで時間の引き算(「退勤時間」-「出勤時間」など)をした際、セルに「#NUM!」と表示されて頭を抱えたことはありませんか?

このエラーが発生する主な原因は、「計算結果がマイナス(負の数)になっているから」です。スプレッドシートの内部では、時間は「シリアル値」と呼ばれる数値(1日=24時間を数値の「1」とする割合)で管理されています。通常、時間は「0」から「1」の正の数で表されるため、計算結果がマイナスになるとスプレッドシートが「時間として表現できない!」と混乱してしまい、エラーを出力してしまうのですね。

例えば、夜の22:00に出勤して翌朝の5:00に退勤した場合、日付を考慮せずに単純に「5:00 - 22:00」と引き算をすると、結果は「-17時間」となりエラーになります。これがエラーの正体です。この日付をまたぐ時間計算のエラーを解決するには、主に以下の2つの対策がありますよ。

対策①:MOD(モッド)関数を使用する

一番シンプルでスマートな解決策が、MOD(モッド)関数を使う方法です。MOD関数は割り算の余りを求める関数ですが、これを利用して「24時間(シリアル値の 1)で割った余りを出す」という処理を行うと、マイナスの値を自動的に24時間のサイクル内に補正してくれます。

=MOD(退勤時間 - 出勤時間, 1)

例えば、セルA2に「22:00」、セルB2に「5:00」と入力されている場合、数式を =MOD(B2-A2, 1) と入力します。これだけで、翌日の朝5時までの差分である「7:00(7時間)」を正しく計算してくれますよ。非常にシンプルで応用が利くので、まずはこのMOD関数を試してみるのがおすすめです。

対策②:IF(イフ)関数で条件分岐を作る

もう一つのアプローチとして、IF関数を使って「退勤時間が修了時間より早い場合は、日付をまたいだと判断して24時間(数値の 1)を足す」という数式を作る方法もあります。

=IF(退勤時間 < 出勤時間, 退勤時間 + 1 - 出勤時間, 退勤時間 - 出勤時間)

退勤時間が出勤時間よりも数値として小さい(日付をまたいでいる)場合に、退勤時間に「1」(24時間分)を加算してから引き算を行います。MOD関数と同じ結果が得られますので、数式の意味を直感的に理解したい場合はこちらを使うのも良いですね。

関数名 数式の例 メリット 向いているケース
MOD関数 =MOD(B2-A2, 1) 数式が非常に短くシンプルにまとまる シンプルな夜勤跨ぎ・日またぎの計算
IF関数 =IF(B2<A2, B2+1-A2, B2-A2) 「日付をまたいだら24時間を足す」という理屈が直感的にわかりやすい 複数人が管理するシートで数式の意図を明示したい場合

注意点:入力データ形式もチェックしましょう

MOD関数やIF関数を使ってもエラーが解消されない場合は、入力されている時間データ自体に原因があるかもしれません。例えば、全角の「:」を使ってしまっていたり、不要なスペースが入っていたりすると、スプレッドシートはそれを時間ではなく単なる「文字列」として扱ってしまいます。数値を入力したセルがデフォルトで右寄せになっているか、確認してみてくださいね。

Q2:時間データをテキスト(文字列)として他の列に綺麗に出力する方法は?

計算した労働時間や作業時間を、他のセルで「〇時間〇分」や「〇:〇」といった形式のテキスト(文字列)として綺麗に表示させたい場面もありますよね。そのまま他の文字列と結合(「&」などで結合)しようとすると、時間ではなく「0.3125」といったシリアル値の小数がそのまま表示されてしまい、見た目が崩れてしまいます。

そんな時に大活躍するのが、数値を指定した書式に変換できるTEXT(テキスト)関数です。

TEXT関数の基本的な構文と使い方

=TEXT(値, "表示形式のフォーマット")

例えば、出勤時間がA2、退勤時間がB2にあり、その差分時間を「〇時間〇分」というテキストとして出力したい場合は、以下のように入力します。

=TEXT(B2-A2, "h時間mm分")

これにより、計算結果が「7:30」であれば「7時間30分」という綺麗な文字列に変換されます。

【重要】合計時間が24時間を超える場合

ここで一つ、実務でとても重要なポイントがあります。それは、合計時間が24時間を超える可能性がある場合です。通常、フォーマットに "h時間mm分" を指定すると、24時間を超えた分は翌日に繰り越されてしまい、例えば「25時間」の計算結果が「1時間」と表示されてしまいます。これを防ぐためには、時間を示す h を角括弧 [ ] で囲んで、"[h]時間mm分" と記述します。

=TEXT(合計時間, "[h]時間mm分")

このように [h] と書くことで、24時間を超えても繰り上がらずに「25時間00分」のように累計時間を正しくテキスト化してくれますよ。

豆知識:テキスト化したデータは再計算に使えない?

TEXT関数で変換した後のデータは、スプレッドシート上では「数値(シリアル値)」ではなく「文字列(テキスト)」として扱われます。そのため、TEXT関数を適用したセル同士を足し算(SUM関数など)しようとしても、正しく計算されなくなってしまいます。あくまで「計算の最終結果を表示・出力するためのセル」として切り分けて使うのが、シートを綺麗に保つコツですよ。

まとめ:時間計算のコツをマスターして勤務表作成をスマートにし、今日も早く帰りましょう!

スプレッドシートにおける時間の引き算や表示形式の設定は、コツさえ掴んでしまえば決して難しくありません。夜勤や日付またぎの計算で「#NUM!」エラーが出たときは「MOD関数」、見栄えを整えてテキスト出力したいときは「TEXT関数」と、それぞれの道具を状況に合わせて使い分けてみてくださいね。

日々のちょっとした手作業や、エラーの原因探しに使っていた時間をなくすことができれば、業務効率は劇的にアップします。無駄な作業をカットして、スプレッドシートの処理もサクサクになれば、今日もいつもより早く家に帰れるはずですよ。仕事はスマートに片づけて、自分の時間をたっぷり楽しみましょうね!

また、もし「数式は合っているけれど、シートの動作自体が重くてイライラする…」とお悩みなら、ぜひこちらのスプレッドシートを軽くする解決策も参考にしてみてくださいね。ちょっとした設定の見直しで、驚くほど動作が軽快になりますよ。

さらに詳しくスプレッドシートの関数仕様を知りたい方は、Googleの公式サポートページもチェックしておくと安心です。MOD関数の詳しい仕様については、Google サポートの「MOD 関数に関するドキュメント」が参考になります。また、TEXT関数の応用的な書式設定については、同じくGoogle サポートの「TEXT 関数に関するドキュメント」で詳細を確認できますよ。

正確な情報は公式サイトをご確認ください。最終的な判断は専門家にご相談ください。

-スプレッドシート