スプレッドシートで勤怠を管理する前に知っておくこと
出退勤の時刻を紙やメモで集め、月末に電卓で勤務時間を足していると、計算の間違いや転記の漏れが起きます。スプレッドシートに時刻を入れて式で計算すれば、入力した時点で 1 日の実働時間と月の合計が出ます。
ただし、時刻の計算には独特の決まりがあります。Google の開発者向けガイドによると、スプレッドシートの日付と時刻は数値で保存され、整数の部分が日付、小数の部分が「1 日のうちの割合」としての時刻です。たとえば 12 時は 0.5、6 時間は 0.25 です。この決まりを知っておくと、この記事の式がなぜそうなっているかがわかります。
電卓で足す場合
- 月末にまとめて計算する
- 60 分で繰り上げる計算を間違えやすい
- 誰がいつ直したか残らない
式で計算する場合
- 入力した時点で実働時間が出る
- 時刻の繰り上げは自動
- 変更履歴から直した跡をたどれる
シートの構成
1 人 1 か月で 1 枚のシートを作り、1 行目に次の見出しを入れます。2 行目から日付ごとに 1 行ずつ使います。
勤怠のシートの形
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | 日付 | 出勤 | 退勤 | 休憩 | 実働 | 残業 |
| 2 | 2026/12/01 | 9:00 | 18:00 | 1:00 | (式) | (式) |
| 3 | 2026/12/02 | 9:00 | 20:30 | 1:00 | (式) | (式) |
| 4 | 2026/12/03 | 22:00 | 6:00 | 1:00 | (式) | (式) |
出勤・退勤・休憩は「9:00」「1:00」のように時刻の形で入れます。休憩も「60」ではなく「1:00」と時刻で入れるのがポイントです。数値の 60 を入れると 60 日分として計算されてしまいます。
実働時間と残業時間を出す式
E2 と F2 に次の式を入れ、月の日数分だけ下へコピーします。
E2 (実働): =IF(OR(B2="",C2=""),"",IF(C2<B2,C2+1,C2)-B2-D2)
F2 (残業): =IF(E2="","",MAX(0,E2-TIME(8,0,0)))
実働時間が出るまでの流れ
- 出勤・退勤・休憩を入力時刻の形で入れる
- 日付をまたぐか判定退勤が出勤より前なら +1 日
- 実働を計算退勤 − 出勤 − 休憩
- 残業を計算実働のうち 8 時間を超えた分
式がしていること
- 空の日は計算しない:
IF(OR(B2="",C2=""),"", ...)で、出勤か退勤が空の行は空白のままにします。休みの日の行に「0:00」が並ぶのを防げます。 - 日付をまたぐ夜勤: 22 時に出勤して翌朝 6 時に退勤すると、そのまま引き算すると負の数になります。退勤が出勤より前のときは
C2+1で退勤に 1 日分 (数値の 1) を足してから引くので、8 時間と正しく出ます。 - 残業: TIME 関数の
TIME(8,0,0)で 8 時間を作り、実働からその分を引いています。8 時間に届かない日は負の数になるので、MAX(0, ...)で 0 にそろえます。
24時間を超える合計を正しく表示する
月末の行の下に、実働と残業の合計を出します。
E33 (実働の合計): =SUM(E2:E32)
F33 (残業の合計): =SUM(F2:F32)
このままだと、合計が 24 時間を超えたときに「160:00」ではなく「16:00」のように、日をまたいだ分が消えて表示されることがあります。時刻の表示形式は 1 日の中の時刻を表すためのもので、日数の分を表示しないからです。
経過した時間として表示するには、表示形式を [h]:mm にします。
範囲を選ぶ
E 列と F 列 (E2 から F33) を選びます。
カスタム数値形式を開く
上部のメニューの [表示形式] > [数字] > [カスタム数値形式] を押します。
形式を入れて適用する
テキストボックスに
[h]:mmと入れ、[適用] を押します。
開発者向けガイドの表示形式の一覧によると、[h] は「経過した時間の数」を表す記号です。時刻の h と違って 24 で折り返さないので、月の合計のように 24 時間を超える値もそのまま表示されます。メニューの手順は 公式ヘルプ のとおりです。
時給から給与を計算する
合計の時間に時給を掛けて給与を出すときは、24 を掛けてから時給を掛けます。
H1 (時給): 1200
H2 (支給額): =E33*24*H1
スプレッドシートの時刻は「1 日 = 1」の数なので、160 時間は内部では 160 ÷ 24 ≒ 6.67 という値です。そのまま時給を掛けると 1/24 の金額になってしまうため、24 を掛けて「時間の数」に直してから掛けます。H2 の表示形式は [表示形式] > [数字] > [通貨] などにしておきます。
時間の値と計算の例
セルの表示 ([h]:mm) | 中の値 | × 24 した値 |
|---|---|---|
| 8:00 | 約 0.333 | 8 |
| 7:30 | 0.3125 | 7.5 |
| 160:00 | 約 6.667 | 160 |
所定の労働日数を出す
月の出勤日数と比べるために、その月の平日の数を出しておくと便利です。NETWORKDAYS 関数は、2 つの日付の間の土日を除いた日数を返し、3 番目の引数に祝日の範囲を渡すとその日も除きます。
=NETWORKDAYS(DATE(2026,12,1),DATE(2026,12,31),祝日!A2:A30)
「祝日」という名前のシートを作り、A 列に会社の休日や祝日を日付の形で並べておきます。実際に出勤した日数は =COUNT(E2:E32) で、実働が入っている行の数として数えられます。
運用するときのコツ
- 入力する列だけ開ける: 式の入った E・F 列や合計の行を消されないよう、[データ] > [シートと範囲を保護] で保護しておくと安心です。
- 月ごとにシートをコピー: 前の月のシートをコピーして日付と時刻だけ消すと、式と表示形式をそのまま使えます。
- 共有の範囲を絞る: 勤怠には個人の情報が入るので、共有する相手と権限を見直します (スプレッドシートの共有方法)。
自分で作るのが難しいときは
数人の勤怠を月に 1 回集計するくらいなら、このテンプレートで十分に回せます。ただ、人数が増えて「全員のシートを 1 つに集めたい」「打刻をフォームやスマートフォンから受けたい」「締め日に自動で集計してメールで送りたい」となると、関数だけでは手が回らなくなります。
GAS を組み合わせると、フォームで受けた打刻をシートに並べる、月末に集計を自動で送る、といった仕組みを作れます。シートでの管理に限界を感じている場合は、専用のシステムへの置き換えも含めて、シートナビの相談フォームからお気軽にご相談ください。
よくある質問
実働時間を「7.5」のような数字で表示したいです。
実働のセルに 24 を掛けると、時間の数として表示できます。たとえば =E2*24 とすると、7 時間 30 分は 7.5 と出ます。表示形式は [表示形式] > [数字] > [数値] にしておきます。
休憩を「60 分」のように分で入力したいです。
分の数で入れたいときは、実働の式の D2 を D2/1440 に変えます。1 日は 1,440 分なので、60 を 1,440 で割ると 1 時間分の値になります。
深夜の時間帯だけ分けて数えられますか?
できますが、出勤と退勤の時刻と深夜の時間帯の重なりを求める式になり、日付をまたぐ場合も考える必要があるため式が長くなります。深夜や休日の割増を細かく分けたい場合は、GAS で計算するか、勤怠管理の専用のサービスを使うほうが間違いが起きにくくなります。


