エクセルで時間の計算(足し算・引き算)をするとき、以下のようなトラブルでお困りではありませんか?
- 「夜勤など日を跨ぐシフトを計算すると『#####』のエラーになる」
- 「15分単位・30分単位での切り上げ・切り捨て方法が分からない」
- 「勤務時間に時給を掛け算したら『354円』など桁違いのおかしい金額になる」
- 「SUM関数で1ヶ月の合計時間が『24時間』を超えると『1:00』にリセットされる」
これらの問題はすべて、エクセル特有の「シリアル値」の仕様や「セルの表示形式」の設定を変更するだけで一発解決できます。
この記事では、理屈抜きの【コピペで即動く時間の計算式】と【表示エラーの解消手順】をコンパクトにまとめました。まずは下の表から、今すぐ解決したい項目を選んで試してみてください。
【事前準備】時間計算を正しく行うための2つの基本設定
計算式を入力する前に、まずはシートの「セルの表示形式」と「入力ルール」を整えておくことが、計算エラーや表記バグを未然に防ぐ重要なステップです。
基本設定1.入力セルの表示形式を「時刻(h:mm)」に統一する
出勤時間や退勤時間を入力するセル(C列・D列など)は、あらかじめ表示形式を 「時刻」 に設定しておきます。
- 時間を入力するセル範囲(例:
C2:D31)を選択します。 - キーボードの
Ctrl + 1(MacはCmd + 1)を押して「セルの書式設定」を開きます。 - [表示形式]タブから [時刻] を選び、
13:30や9:00の表記形式を選択して[OK]を押します。
注意点
「9.00」(ドット区切り)や「9時00分」(文字列)で入力してしまうと、エクセルが「数値・時刻」として認識できず、引き算や足し算を行っても計算エラー(#VALUE! など)が発生します。
基本設定2.時刻の入力は「コロン(:)」区切りで行う
エクセルで時刻を入力する際は、必ず半角のコロン区切り(例: 9:00 や 18:30)で入力するルールを社内・チームで徹底しましょう。
基本となるエクセル表のセル配置(レイアウト)
この記事で紹介する時間の計算式は、以下のセル配置を前提としています。ご自身のシートの列に合わせてセル番号を読み替えるか、同じ配置で表を作成してご活用ください。
| 行 | C列:出勤 | D列:退勤 | E列:休憩 | F列:実労働 | G列:残業 | H列:深夜 | I列:時給換算 |
| 2行目 | 9:00 | 18:00 | 1:00 | (数式) | (数式) | (数式) | (数式) |
出勤(C2)、退勤(D2)、休憩(E2)のセルを使って、実労働時間(F2)を算出します。
【基本①】引き算で実労働時間を出す時間の自動計算式
まずは、出勤・退勤・休憩の各セルを指定して実労働時間を算出する基本の足し算・引き算の数式です。
- よくあるエクセル時間の計算式の課題
全角入力やドット入力による#VALUE!エラーや、数式に「-1」と書いて24時間引かれてしまう不具合が頻発します。 - エクセル時間の計算式ノウハウ
数式内で固定時間を引く際はTIME(時,分,秒)関数を使い、さらに[データの入力規則]で入力制限をかけて表記揺れや誤入力を未然に防ぐ。
- C2: 出勤時間
- D2: 退勤時間
- E2: 休憩時間
- 計算式:
= 退勤時間 - 出勤時間 - 休憩時間 - 入力するセル:
F2
=D2-C2-E2- ステップ1: セルの配置を確認・入力する
C2セルに「出勤時間(例:9:00)」、D2セルに「退勤時間(例:18:00)」、
E2セルに「休憩時間(例:1:00)」を入力します。 - ステップ2: 実労働時間のセル(F2)に数式を入力する
F2セルに=D2-C2-E2と入力してEnterキーを押します。 - ステップ3: 計算結果を確認する
退勤から出勤と休憩を引いた「8:00」が算出されます。
休憩時間が「全社一律で1時間固定」の場合
休憩用セルを作らず数式内で固定で1時間引きたい場合は、=D2-C2-TIME(1,0,0)を使用します。エクセルで数値の「-1」を引くと「1日(24時間)」が引かれて計算エラーになるため、時間を数式内で指定する際は必ず TIME(時,分,秒) 関数を使用します。
【基本②・夜勤対応】実労働時間を出す時間の自動計算式
日勤だけでなく、日を跨ぐ夜勤シフトでもエラー(#####)を出さずに実労働時間を正確に算出する数式とノウハウです。
- よくあるエクセル時間の計算式の課題
退勤時間が出勤時間より小さくなる夜勤シフトでは、計算結果がマイナスとなり「#####」エラーが発生します。 - エクセル時間の計算式ノウハウ
MOD(退勤-出勤, 1) 関数を使うことで、マイナス値を自動的にプラス(24時間加算)へ変換して夜勤エラーを一発解消します。
日を跨ぐ「夜勤」のマイナスエラー(#####)が出た時の直し方
日を跨ぐ夜勤(例: 22:00出勤〜翌6:00退勤)で ##### というエラーが表示されるのは、エクセルが時間を「1日=1」とするシリアル値(小数)で管理しており、6:00 - 22:00 のように退勤が出勤より小さくなると計算結果がマイナス(負の数)になり、標準の表示設定では表示できないためです。
このエラーを解消する代表的な3つの修正方法をまとめました。
① 【おすすめ】MOD関数を使う方法(最も簡単・実務向き)
最も簡単で実務でよく使われる解決策は、引き算を MOD 関数で囲むことです。
- 入力するセル:
F2
=MOD(D2 - C2, 1) - E2解説(関数の仕組み)
MOD 関数は、指定した数値の「割り算の余り」を計算する関数(MOD(数値, 割る数))です。エクセルでは時間を「1日=1」とするシリアル値(小数)で管理しているため、MOD(数値, 1) と指定することで以下の仕組みが動きます。
D2 - C2(退勤 – 出勤)
日勤(9:00〜18:00)なら18:00 - 9:00 = 0.375(正の数)、夜勤(22:00〜翌6:00)なら6:00 - 22:00 = -0.666...(負の数)になります。MOD( ... , 1)で余りを算出
計算結果が正の数の場合はそのままの値が返りますが、マイナス(負の数)になった場合は「自動的に 1(24時間分)を足した余り」を計算します。これにより、夜勤の-0.666...が正の数である0.333...(8時間)に一発変換され、#####エラーを回避します。- E2(休憩時間を引く)
正の数に変換された勤務時間から、最後に休憩時間(E2)を引くことで正確な実労働時間を算出します。
② IF関数で「24時間(1)」を足す方法
IF 関数を使い、「退勤時刻が出勤時刻より小さい場合は1(24時間)を加算する」という条件分岐を作る方法もあります。
- 入力するセル:
F2
=IF(D2 < C2, 1 + D2 - C2, D2 - C2) - E2解説(関数の仕組み)
D2 < C2 で「退勤(D2)が出勤(C2)より数値として小さい=日を跨いで夜勤になっている」と判定します。夜勤の場合は計算結果がマイナスにならないよう退勤側に 1(24時間分)を足してから引き算を行い(1 + D2 - C2)、日勤(通常勤務)の場合はそのまま引き算(D2 - C2)を行うよう条件分岐させることで、##### エラーを回避します。さらに最後で - E2 をつなげることで、実労働時間から休憩時間を引いています。
③ 日付も含めて入力する方法
出勤(C2)と退勤(D2)のセルに、時刻だけでなく「年月日+時刻」(例: 2026/10/6 22:00 〜 2026/10/7 6:00)の形式で入力しておけば、単純な引き算(=D2 - C2 - E2)でもマイナスにならず正確な経過時間が算出されます。
分単位の時間計算・残業・深夜に対応する応用計算式
さらに、現場の就業規則や残業・深夜手当の計算に対応する応用数式です。
- よくあるエクセル時間の計算式の課題
端数処理の切り上げ・切り捨てを手入力で行うとミスが発生しやすい。また、残業や深夜労働の自動集計は複雑なIF関数が必要になる。 - エクセル時間の計算式ノウハウ
切り上げ・切り捨てはCEILING・FLOOR関数、残業時間はMAX関数、深夜時間はLET関数を活用することで、手計算なしでスマートに自動算出できます。
15分単位・30分単位で切り上げ・切り捨て(丸め)する方法
出勤時間を15分刻みで切り上げたり、退勤時間を15分刻みで切り捨てたりしたい場合は、CEILING 関数(切り上げ)と FLOOR 関数(切り捨て)を使用します。
① 出勤・退勤を個別処理用の列(作業列)を新設する場合
表に「丸め後の出勤(J列)」や「丸め後の退勤(K列)」といった計算用の列を新しく追加して入力する配置です。
- 列を新設して出勤時間を15分単位で切り上げる場合の関数
入力するセル:J2(丸め後の出勤セル)
=CEILING(C2, "0:15")解説(関数の仕組み)
CEILING(基準値, 基準の倍数) は、指定した数値を基準の倍数に「切り上げる」関数です。第一引数に『出勤時間(C2)』、第二引数に倍数として『”0:15″』を指定することで、8:51 や 8:59 といった出勤時刻を次の15分単位である「9:00」へ自動的に切り上げます。
- 列を新設して退勤時間を15分単位で切り捨てる場合の関数
- 入力するセル:
K2(丸め後の退勤セル)
- 入力するセル:
=FLOOR(D2, "0:15")解説(関数の仕組み)
FLOOR(基準値, 基準の倍数) は、指定した数値を基準の倍数に「切り捨てる」関数です。第一引数に『退勤時間(D2)』、第二引数に倍数として『”0:15″』を指定することで、18:14 や 18:29 といった退勤時刻を直近の15分単位である「18:00」や「18:15」へ自動的に切り捨てます。
② 既存の「出勤(C2)」「退勤(D2)」セルに上書き入力する場合
出勤(C2)や退勤(D2)のセルに、入力した時刻そのものを自動で丸めて表示させたい場合です。
- 出勤(C2セル)に直接入力する場合の関数
- 入力するセル:
C2
- 入力するセル:
=CEILING("8:51", "0:15")解説(関数の仕組み)
セル参照(C2など)を使わず、関数内に直接時刻をダブルクォーテーションで囲んで "8:51" のように記述します。CEILING 関数がその時刻を15分単位で切り上げ、セル上に「9:00」と丸めた結果を表示させます。
- 退勤(D2セル)に直接入力する場合の関数
- 入力するセル:
D2
- 入力するセル:
=FLOOR("18:14", "0:15")解説(関数の仕組み)
出勤と同様に、関数内に直接 "18:14" と記述します。FLOOR 関数がその時刻を15分単位で切り捨て、セル上に「18:00」と丸めた結果を表示させます。
上記のような作業列を増やしたり、打刻データ(C2・D2)セルは触らずにそのままのデータで集計したい場合は、次に紹介する「③ 端数処理を含めた「実労働時間」を一発で計算したい場合の数式(F2セル)」を使用するのが最もスマートです。
③ 端数処理を含めた「実労働時間」を一発で計算したい場合
そもそも実労働時間の算出のタイミングで「出勤の15分切り上げ」と「退勤の15分切り捨て」の数式を組み込み、夜勤のエラー防止(MOD 関数)も含めて実労働時間を算出する組み合わせた関数です。
- 入力するセル:
F2
=MOD(FLOOR(D2, "0:15") - CEILING(C2, "0:15"), 1) - E2 解説(関数の仕組み)
この数式は、3つの計算(端数処理・夜勤対応・休憩控除)を1つのセルで順番に行っています。
- 端数処理(切り捨て・切り上げ)
FLOOR(D2, "0:15")で退勤時刻を15分単位に切り捨て、CEILING(C2, "0:15")で出勤時刻を15分単位に切り上げます。 - 夜勤エラーの防止(MOD関数)
丸めた退勤から出勤を引き算し、その結果をMOD( ... , 1)で囲むことで、日を跨ぐ夜勤シフトで引き算がマイナスになっても自動で正の数(24時間加算)に変換して#####エラーを防ぎます。 - 休憩時間の引き算
最後に全体の計算結果から休憩時間(- E2)を引くことで、端数処理済みの正確な実労働時間を算出します。
30分単位で丸めたい場合
数式内の "0:15" の部分を "0:30" に書き換えるだけで、そのまま30分単位の切り上げ・切り捨てに対応できます。
法定8時間を超えた「残業時間」の自動抽出
実労働時間(F2)から、8時間を超えた時間だけを残業時間(G2)として抜き出します。
- 入力するセル:
G2
=MAX(0, F2 - TIME(8, 0, 0))解説(仕組み)
MAX(値1, 値2) は、指定した値の中で最も大きい数値を抽出する関数です。この数式では、2つの値を比較して残業時間を判定しています。
F2 - TIME(8, 0, 0)(実労働時間から8時間を引く)TIME(8, 0, 0)はエクセル内で正確な「8時間」を表す関数です。実労働時間(F2)から8時間を引き算することで、8時間を超えた残業分を割り出します。MAX(0, ...)でマイナス表示を防ぐ
実労働時間が7時間など「8時間未満」の場合、そのまま引き算をすると計算結果がマイナス(-1:00)になってしまいます。ここでMAX(0, 計算結果)を使うことで、マイナスになった場合は大きい方の値である0(0:00)を選択して表示させます。
この数式の特徴
「8時間を超えた分だけ数えて、8時間以下なら0にする」という条件分岐を、IF関数を使わずにシンプルに記述できるのがこの数式の強みです。
深夜労働時間(22:00〜翌5:00)の自動抽出
出勤(C2)と退勤(D2)から、深夜時間帯(22時〜翌5時)に重なる勤務時間を自動算出します。
- 入力するセル:
H2(Excel 2021 / Microsoft 365向け)
=LET(s, MOD(C2,1), e, s + MOD(D2-C2,1), MAX(0, MIN(e, TIME(29,0,0)) - MAX(s, TIME(22,0,0))))解説(数式の仕組み)
この数式は、LET 関数を使って変数(一時的な名前)を定義し、複雑な条件計算をわかりやすく処理しています。
sとeで勤務開始・終了時刻を整理する
・s(開始時刻):MOD(C2, 1)で出勤時刻の時刻部分だけを取り出します。・e(終了時刻):s + MOD(D2-C2, 1)で、日を跨ぐ夜勤の場合でも出勤から退勤までの経過時間を足し合わせた「通算の終了時刻」を作ります。- 深夜時間帯(22:00〜29:00)との「重なり」を計算する
翌朝5:00は、22:00基準で考えると「29:00」になります。MIN(e, TIME(29,0,0)) - MAX(s, TIME(22,0,0))とすることで、「勤務していた時間帯」と「深夜時間帯(22:00〜29:00)」が重複している範囲を正確に抜き出します。 MAX(0, ...)で日勤シフト時のマイナスを防ぐ
日勤(9:00〜18:00)のように深夜時間帯にかからないシフトの場合、引き算の結果がマイナスになります。MAX(0, ...)で囲むことで、マイナスの場合は0(0:00)を表示させます。
この数式の特徴
通常ならIF関数を何重にも組み合わせる必要がある「日跨ぎの深夜時間計算」を、数式1本でスマートかつ確実に算出できる非常に高度で実用的な記述です。
エクセルの合計時間の給与計算エラー・足し算トラブルの解決法
時間計算で頻発する「給与の金額バグ」と「合計時間の24時間リセット」の解決手順です。
【給与計算エラー】時給を掛け算したら「354円」などおかしい金額になる問題の直し方
Excelで「時給 × 勤務時間」を計算した際、354円 のような不自然に小額になってしまうのは、エクセル内部の「シリアル値」という仕組みが原因です。
- よくあるエクセル時間の計算式の課題
時間(シリアル値)にそのまま時給を掛けると数百円レベルの不自然な小額になり、SUM 関数で集計すると24時間ごとに合計が「0:00」にリセットされてしまいます。 - エクセル時間の計算式ノウハウ
給与計算は数式に * 24 を足して「時間数」へ変換し、累積合計時間はセルの表示形式を [h]:mm に設定することで解消します。
なぜ「354円」になってしまうのか?
エクセルは時間を「時刻」ではなく、「1日(24時間)= 1」とする小数(シリアル値)で管理しています。
例えば、8時間30分(8.5時間) 働いて、時給1,000円 の場合を考えます。
- エクセル内部の値
8時間30分 は「1日の約35.4%」にあたるため、内部では0.35416...という小数で保持されています。 - そのまま掛け算すると
0.35416... × 1000円 = 354.16...円(約354円)と計算されてしまいます。
正しい計算式の直し方ステップ
1. 計算式に * 24 を追加する
時間のシリアル値(0.354…)に 24 を掛け算 することで、「8.5」という通常の数値(時間数)に変換できます。
【I2セル(時給換算用)に入力する計算式】
=F2 * 24上記は8.5(時間数)の時間のみを算出する計算式です。もし、時給1,000円で支給額まで一括で出したい場合は =F2 * 24 * 1000 と入力します。
2. セルの表示形式を「標準」または「通貨」に変更する
数式を直してもセルに 12:00 や 8:30 と表示されてしまう場合は、エクセルが自動で表示形式を「時刻」にしてしまっています。
- 設定例
I2セルを選択し、キーボードのCtrl + 1(MacはCmd + 1)で「セルの書式設定」を開き、[表示形式]タブから [通貨](または[標準])を選択して[OK]をクリックします。これで「8,500円」と正しく金額が表示されます。
【足し算トラブル】1ヶ月の合計時間が「24時間」を超えると「1:00」にリセットされる問題
SUM 関数で1ヶ月分の労働時間を合計した際、本来「161:00(161時間)」になるはずが「1:00」のように小さく表示されてしまうトラブルの解消法です。
- よくあるエクセル時間の計算式の課題
SUM関数で時間の合計を計算すると、24時間を超えるたびに時計が1周して「0:00」にリセットされてしまいます。 - エクセル時間の計算式ノウハウ
合計セルの表示形式を「ユーザー定義」で [h]:mm に設定することで、24時間を超えてもリセットされず累積の合計時間を表示できます。
前提:表のレイアウト例(どこに何が入っているか)
以下のように、「F列」に毎日の実労働時間が入っており、「F32セル」に1ヶ月の合計時間を計算するケースを例として解説します。
| 行 | C列:出勤 | D列:退勤 | E列:休憩 | F列:実労働時間 |
| 2行目(1日) | 9:00 | 18:00 | 1:00 | 8:00 |
| 3行目(2日) | 9:00 | 19:00 | 1:00 | 9:00 |
| … | … | … | … | … |
| 31行目(30日) | 9:00 | 18:00 | 1:00 | 8:00 |
| 32行目(合計) | 合計時間 | =SUM(F2:F31) |
解決ステップ
- 合計を表示させたいセル(例:F32)に SUM 関数を入力する
日々の実労働時間(F2〜F31)を足し算するため、F32セルに=SUM(F2:F31)と入力します。 - 「セルの書式設定」を開く
F32セル(合計セル)を選択した状態で、ショートカットキーCtrl + 1(MacはCmd + 1)を押します。 - 表示形式を
[h]:mmに変更する
左メニューから 「ユーザー定義」 を選び、[種類]の入力欄に半角で[h]:mmと入力して[OK]をクリックします。
なぜこれで正しく表示されるのか?
通常の h:mm 設定は時計の「時刻(何時何分)」を表すため、24時間を超えると時計が1周してリセットされてしまいます。h を 角かっこ [h] で囲むことで、24時間を超えてもリセットされず、累積の「合計時間数(例: 161:00)」として正しく表示できるようになります。
エクセルからシフト作成システムへの移行を検討すべきタイミング
数式や表示形式を工夫すればエクセルでも時間計算は可能ですが、運用環境の変化によってエクセル管理そのものに限界が訪れるケースは少なくありません。
以下のような課題やサインが現れ始めたら、エクセル管理から専用のシフト作成システムへの移行を検討すべきタイミングです。
1. 手入力ミス・計算ミスや確認作業の負担が増えたとき
タイムカードからの転記や出退勤時刻の入力作業が増えると、どうしても入力ミスや確認漏れが発生しやすくなります。給与の誤払いを防ぐための2次チェックは不可欠ですが、従業員数が増えるほど手作業での確認コストは限界を迎えます。チェック作業に膨大な時間やストレスを感じ始めたら、自動化への移行サインと言えます。
2. 夜勤(日またぎ)・複雑な手当・端数処理の管理が煩雑になったとき
22時以降の出勤など日を跨ぐ夜勤ではマイナス表示エラー(#####)が発生しやすく、MOD 関数などの複雑な数式設定や管理ノウハウが必要となります。さらに、15分単位の丸め処理におけるシリアル値の計算誤差や、残業・深夜・休日といった複雑な割増賃金を手動の数式で管理し続けるのは、計算ミスや設定漏れの大きなリスクになります。現場の運用や手当計算が複雑化してきたと感じたら、システム導入を検討するタイミングです。
3. 法改正や税率・保険料率の手動更新に不安を感じたとき
労働基準法の改正や社会保険料率、所得税率の変更が行われるたびに、エクセルでは自社の数式や設定を手作業で更新しなければなりません。万が一、設定変更の漏れや見落としがあると、最新の法令に沿わない誤った給与計算を行ってしまう法的リスクを抱えることになります。法改正に伴う手作業での設定変更に不安や負担を感じたときは、自動で法改正に対応できるシステムへの移行が安全です。
4. ファイルの破損・消失リスクやバックアップの手間が増えたとき
エクセルファイルはパソコンの故障や誤操作による上書き・削除によってデータが復元できなくなる危険があるため、日常的なバックアップ管理が欠かせません。また、管理者が増えたり拠点・事業所が分かれたりすると、ファイルのバージョン管理や複数人による同一シートの編集作業が非常に煩雑になります。データ紛失のリスク対策や複数人での情報共有に手間がかかり始めたら、シフト作成システムへの切り替え時です。
エクセルでの手作業に限界を感じたら「シフティー」の活用がおすすめ
手入力の手間や複雑な数式エラーから完全に解放されたい場合は、シフト作成システム「シフティー」の導入が効果的です。
シフティーなら、出退勤時間の自動集計や15分単位の丸め処理はもちろん、夜勤・残業・深夜時間の自動計算や各種労務管理までシステム上でスムーズに自動化できます。エクセル運用による計算ミスや管理コストにお悩みの場合は、ぜひ一度無料体験や資料請求をご検討ください。
まとめ
エクセルでの時間計算トラブルは、シリアル値の仕様に合わせた数式や表示形式の設定変更で解決できます。まずは今回ご紹介した数式や設定を試して日々の集計作業を効率化しつつ、もし将来的に手入力ミスや集計の手間が膨らんで限界を感じた際には、「シフティー」のようなシフト作成システムでの自動化もあわせて検討してみてください。