【Excel】時間の計算が合わない理由|24時間以上の合計・#####・時給計算のつまずきを7つ解決

時間計算が合わない理由のサムネイル Excel

Excelの日付と時間は、あるとき急に言うことを聞かなくなります。

  • 作業時間を合計したら、24時間を超えたところで 0:45 に戻ってしまった
  • 退勤時刻から定時を引いたら、セルが ##### で埋まった
  • 8時間働いた人の時給計算をしたら、給料が 400円 になった

別々のトラブルに見えますが、原因は全部同じです。

ヒントは、日付が入ったセルの表示形式を「標準」に変えると出てくる 46235 のような数字です。ここが分かると、上の3つが同じ話だったことが分かります。

この記事では、その正体から始めて、日付と時間でつまずくところを7つにまとめました。

  1. 日付と時間の正体を目で見る
  2. 数か月後の日付を出す(EDATE関数)
  3. 月末と月初を出す(EOMONTH関数)
  4. 勤続年数を出す(DATEDIF関数)
  5. 合計が24時間で0時に戻る([h]:mm
  6. 時給を掛けたら400円になる(×24)
  7. マイナスの時間が#####になる

全部覚える必要はありません。「これ、困ったやつだ」というものを1つ持ち帰っていただければ十分です。

1. 日付と時間の正体を目で見る

まず、日付の入ったセルを1つ選んで、表示形式を 「標準」 に変えてみてください。

ホームタブの「数値」グループにある表示形式の欄を、「標準」にするだけです。

すると、日付が消えて 46235 という数字になります。

壊れたわけでも、間違えたわけでもありません。これが日付の中身です。

Excelは、1900年1月1日を「1」として、1日進むごとに1ずつ増える数字で日付を管理しています。2026年8月1日は、1900年1月1日から数えて46,235日目。だから46235なんです。

この数字を シリアル値 と呼びます。

時刻は「小数」になっている

では、時刻の入ったセルを標準にするとどうなるか。

12:00 を標準にすると、0.5 になります。

1日を「1」としているので、12時はちょうど真ん中で0.5。同じように考えると、

時刻 シリアル値
6:00 0.25
12:00 0.5
18:00 0.75
24:00 1

1日のうちのどこにいるかを、小数で表しているわけです。ここがこの記事でいちばん大事なところです。

日付と時刻が両方入っている場合

「2026/8/1 12:00」のように日付と時刻が両方入ったセルを標準にすると、46235.5 になります。さきほどの2つがくっついただけです。

切り離してみると、はっきりします。INT関数は小数を切り捨てて整数だけを取り出す関数です。

=INT(A2)

これで 46235(日付の部分)が出ます。残りは、元の数字から引けば出てきます。

=A2-INT(A2)

こちらは 0.5(時刻の部分)です。

整数の部分が日付、小数の部分が時刻。

Excelの日付と時間は、この1本の数直線の上に並んでいます。以降の6つは、すべてこの仕組みから説明がつきます。

補足: 1900年前後の日付を扱う場合だけ注意が必要です。Excelは互換性の都合で、実際には存在しない「1900年2月29日」をカレンダーに持っています。そのため1900年3月より前の日付は1日ずれます。普段の業務で1900年の日付を計算することはまずないので、こういうものだと思っておいて大丈夫です。

2. 数か月後の日付を出す(EDATE関数)

日付は「1日=1」で管理されているので、〇日後は足し算で出せます。

=A2+7

これで1週間後です。ここまでは問題ありません。

では、6か月後はどうでしょうか。「半年だから180日」と考えて足してみます。

=A2+180

1月31日に180を足すと、出てくるのは 7月30日。6か月後の7月31日には、1日足りません。

1か月は30日だったり31日だったり、2月は28日だったり29日だったりします。月をまたぐ計算は、足し算ではうまくいきません。

こういうときに使うのが EDATE関数 です。

=EDATE(A2, 6)
  • 開始日 … 元になる日付
  • … 何か月ずらすか

これで、きちんと 7月31日 が出ます。

マイナスを入れれば過去にも遡れます。

=EDATE(A2, -2)

3月15日から2か月前で、1月15日です。

注意点が1つ。 EDATE関数の結果は、シリアル値のまま表示されることがあります。 46235のような数字が出てきたら、表示形式を「日付」に変えてください。壊れているわけではなく、1で見たとおり、それが日付の中身です。

3. 月末と月初を出す(EOMONTH関数)

「今月納品、翌月末払い」のような日付を計算するときの話です。

月末は31日の月もあれば30日の月もあり、2月は28日だったり29日だったり。手入力でやると、どこかで必ず間違えます。

月末を求めるのは EOMONTH関数 です。

=EOMONTH(A2, 1)
  • 開始日 … 元になる日付
  • … 何か月ずらすか(EDATE関数と同じ考え方)

2つ目の引数で、どの月の月末かが決まります。

数値 出てくる日
0 その月の月末
1 翌月の月末
-1 先月の月末

7月のどこかの日付を基準にすれば、0で7月31日、1で8月31日、-1で6月30日です。これも結果がシリアル値で返ってくるので、表示形式を日付に直してください。

月初を出す関数は、存在しません

ここで意外に思われるところです。月初(その月の1日)を出す専用の関数は、Excelにありません。

ただ、EOMONTH関数で月末が出せるということは——先月末に1を足せば、その月の1日です。

=EOMONTH(A2, -1)+1

「1を足す」がそのまま「1日進める」になるのは、1で見たシリアル値の仕組みそのものです。

DATE関数を使う書き方もあります。

=DATE(YEAR(A2), MONTH(A2), 1)

「A2の年、A2の月、1日」という組み立てで、結果は同じです。ただし関数が3つ入れ子になるので、EOMONTHで先月末を出して1を足すほうが簡単です。

4. 勤続年数を出す(DATEDIF関数)

「この人は何年働いているか」を出したいとき。使うのは DATEDIF関数 です。

この関数、ちょっと特殊です。セルに =DATEDIF( と打ち始めても、関数の候補に出てきません。 途中まで打つと候補がずらっと出てくる、あの一覧に載っていないんです。

出てこないだけで、使えます。引数の案内も出ないので、自分で最後まで入力してください。

=DATEDIF(B2, TODAY(), "Y")
  • 開始日 … 入社日
  • 終了日 … 今日(TODAY関数)
  • 単位 … 何で数えるか

最後の単位は、ダブルクォーテーションで囲んで指定します。

単位 出てくるもの
“Y” 満年数(11年)
“M” 通算の月数(138か月)
“D” 通算の日数
“YM” 年数を数えた残りの月数(6か月)

実務で使うのは「◯年◯か月」

「11年」だけでは足りず、「11年6か月」と出したいことのほうが多いはずです。その場合は “Y” と “YM” を文字列でつなぎます。

=DATEDIF(B2,TODAY(),"Y")&"年"&DATEDIF(B2,TODAY(),"YM")&"ヶ月"

& は文字をつなぐ記号です。「年数」+「年」+「残りの月数」+「ヶ月」を順につないでいます。

“MD”(残りの日数)もありますが、これは使わないでください。 条件によっておかしな値を返すことが知られていて、マイクロソフトのサポートページにも注意書きがあります。“Y” と “YM” の組み合わせが安全です。

5. 合計が24時間で0時に戻る([h]:mm)

ここからが本題です。おそらく、いちばん多いつまずきです。

作業時間を合計します。

=SUM(B2:B4)

8:30、9:00、7:15 の3つを足したので、24:45 になるはずです。ところが出てきたのは 0:45

明らかに変ですよね。でも、計算は合っています。

合計セルの表示形式を「標準」に変えてみてください。

1.03125 と出ます。

1日を1として数えているので、24時間45分は「1日と45分」=1.03125。きちんと足し算はできているんです。

問題は表示のほうです。時刻の表示形式は「1日のうちの何時何分か」を表すものなので、整数の部分(=1日ぶん)が表示から消えて、残りの0.03125が0:45として出ているわけです。

角カッコで「繰り上げないで」と伝える

24時間を超えたまま表示するには、表示形式を変えます。

  1. 合計のセルを右クリック →「セルの書式設定」
  2. 「表示形式」タブ →「ユーザー定義」
  3. 種類の欄に [h]:mm と入力

これで 24:45 と表示されます。

角カッコが「繰り上げないで」という合図です。これなら100時間でも200時間でも、そのまま表示できます。

一覧に [h]:mm が見当たらないときは、h:mm を選んでから h の部分だけを角カッコで囲んでください。

分で表示したいときは、mのほうを囲みます。

[m]:ss

これで「1485:00」のように、通算の分数で出ます。

6. 時給を掛けたら400円になる(×24)

これもよくある形です。8時間働いた人の給料を計算します。

=B2*E2

B2が労働時間の 8:00、E2が時給の 1200。出てきた答えは 400 です。

もうお分かりだと思いますが、8:00 を標準にすると 0.3333… です。8時間は1日の3分の1だからです。

つまりこの式は、8ではなく 0.3333に1200を掛けている。だから400円になります。

時刻を数値として計算したいときは、24を掛けて「日」から「時間」に戻します。

=B2*24*E2

これで 9,600円。正しい金額です。

分にしたいときは、さらに60を掛けます。

=B2*24*60

8:00なら480分です。

単位を揃えてから計算する——小学校の算数でやったことと同じです。Excelの時刻も、そこは変わりません。

ちなみに5の合計セル(1.03125)を数値として使いたいときも、同じく24を掛けます。=SUM(B2:B4)*2424.75時間 になり、これに時給を掛ければ支給額が出ます。表示形式を[h]:mmにするのは「見せる」ため、×24は「計算に使う」ためです。

7. マイナスの時間が#####になる

退勤時刻が定時より早かった場合です。

=C2-B2

引き算の結果がマイナスになると、セルが ##### で埋まります。

「列の幅が足りないのかな」と思って広げたくなりますが、これは広げても直りません。

理由は1で見たとおりです。シリアル値は1900年1月1日から数えた日数なので、0より前の時刻というものが存在しない。マイナスの時刻を時計の形で表示する方法が、そもそもないんです。

対処は2つあります。

対処A:文字として表示する

マイナス記号を自分で付けて、文字列として見せる方法です。

="-"&TEXT(ABS(C2-B2),"h:mm")
  • ABS関数 … マイナスの値をいったんプラスに直す
  • TEXT関数 … その数値を「h:mm」の形の文字に変える
  • "-"& … 先頭にマイナス記号をくっつける

これで -0:30 と表示されます。ただしこれは文字なので、このセルをさらに合計することはできません。 見た目を整えるための方法です。

対処B:数値にしてしまう

計算を続けたい場合は、6と同じく24を掛けて数値に変えます。

=(C2-B2)*24

これなら -0.5 と表示され、マイナスのまま合計もできます。時間単位の数値になるので、そのまま時給を掛けることもできます。

過不足を集計したいならB、勤務表に見た目として出したいならA、という使い分けです。

なお、他のサイトでは「オプションで1904年から計算する設定に変える」という方法が紹介されていることがあります。たしかにマイナスの時刻は表示できるようになりますが、そのファイルに入っている既存の日付が全部4年ずれます。 すでにデータが入っているファイルでは勧めません。

おまけ:表示と中身は別物

最後にもう1つ、日付・時間と同じ理屈でつまずくところを。

CSVファイルからコピーしてきた数字と、自分で打ち込んだ数字。見た目はまったく同じでも、片方は数値、片方は文字列ということがあります。文字列になっていると、合計しても0のままです。

見分け方は簡単で、何も設定していないセルなら、数値は右に寄り、文字列は左に寄ります。

Excelは「数字は右、文字は左」と決めているからです。中央揃えや右揃えを設定してあると分からなくなるので、そのときは書式をいったん解除して確認してください。

文字列を数値に直すには、いくつか方法があります。

  • 区切り位置 … データタブ →「区切り位置」→ そのまま「完了」を押すだけで数値に変わります(範囲が広いときはこれが速いです)
  • VALUE関数=VALUE(A2) で数値に変換します
  • 形式を選択して貼り付け … どこかのセルに1を入れてコピーし、直したい範囲に「形式を選択して貼り付け」→「乗算」

表示形式は化粧のようなものです。中身の数字は別にあります。

つまずきやすいところ

  • EDATE・EOMONTHの結果が数字のまま出る … 壊れていません。表示形式を「日付」に変えてください
  • DATEDIFが候補に出てこない … 出なくて正常です。最後まで自分で入力してください
  • [h]:mm を入れても24:45にならない … 角カッコが半角になっているか確認してください。全角の[]では効きません
  • 合計が0:45のまま … 表示形式を変えたのが別のセルかもしれません。合計セル自体を選び直してください
  • 時給計算の×24を、時刻同士の引き算に掛け忘れる … 「時刻を数値として使うときは必ず×24」と覚えておくと、5・6・7が全部つながります

まとめ

  • 日付と時間の正体はシリアル値。整数が日付、小数が時刻
  • 月をまたぐ計算は EDATE関数。足し算では合わない
  • 月末は EOMONTH関数。月初を出す関数は無いので 先月末+1
  • 勤続年数は DATEDIF関数。候補に出ないが使える。単位は “Y”と”YM”
  • 24時間で0時に戻るのは繰り上がったから。表示形式 [h]:mm
  • 時給計算が合わないのは単位が違うから。×24で日を時間に戻す
  • マイナスの時間が##### になるのは、それが存在しないから

7つのうち5・6・7は、どれも「時刻を数値として扱う」話です。×24 という一手を覚えておくと、この3つは同じ方法で片付きます。

動画では、実際に画面を動かしながら同じ手順を解説しています。46235や1.03125が画面に出てくるところは、動いているものを見たほうが早いと思います。

▼動画で見る
【Excel】時間計算 24時間以上・引き算7選|0時に戻る理由、#####になる理由
https://youtu.be/sPcThB8-fiM

▼あわせて見たい(動画)
勤怠管理の時間計算がうまくいかないときの対処法

「自分の仕事のExcelでもできますか?」というご相談も受け付けています。
今の状況を聞かせていただければ、どこから始めると良いか一緒に整理していきます。