自動化の相談

業務テンプレート · 2026年11月11日

勤怠管理表をスプレッドシートで作る|出退勤から勤務時間と残業を自動計算

Google スプレッドシートで勤怠管理表を作る方法を、そのまま使える式付きで解説します。出勤・退勤・休憩から実働時間と残業時間を出す式、日付をまたぐ夜勤の計算、24時間を超える合計を正しく表示する表示形式、時給からの給与計算、NETWORKDAYS での所定労働日数まで公式ヘルプで確かめました。

スプレッドシートで勤怠を管理する前に知っておくこと

出退勤の時刻を紙やメモで集め、月末に電卓で勤務時間を足していると、計算の間違いや転記の漏れが起きます。スプレッドシートに時刻を入れて式で計算すれば、入力した時点で 1 日の実働時間と月の合計が出ます。

ただし、時刻の計算には独特の決まりがあります。Google の開発者向けガイドによると、スプレッドシートの日付と時刻は数値で保存され、整数の部分が日付、小数の部分が「1 日のうちの割合」としての時刻です。たとえば 12 時は 0.5、6 時間は 0.25 です。この決まりを知っておくと、この記事の式がなぜそうなっているかがわかります。

電卓で足す場合

  • 月末にまとめて計算する
  • 60 分で繰り上げる計算を間違えやすい
  • 誰がいつ直したか残らない

式で計算する場合

  • 入力した時点で実働時間が出る
  • 時刻の繰り上げは自動
  • 変更履歴から直した跡をたどれる

シートの構成

1 人 1 か月で 1 枚のシートを作り、1 行目に次の見出しを入れます。2 行目から日付ごとに 1 行ずつ使います。

勤怠のシートの形

ABCDEF
1日付出勤退勤休憩実働残業
22026/12/019:0018:001:00(式)(式)
32026/12/029:0020:301:00(式)(式)
42026/12/0322:006:001:00(式)(式)
A〜D 列は手で入力し、E・F 列は式で計算します。

出勤・退勤・休憩は「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. 出勤・退勤・休憩を入力時刻の形で入れる
  2. 日付をまたぐか判定退勤が出勤より前なら +1 日
  3. 実働を計算退勤 − 出勤 − 休憩
  4. 残業を計算実働のうち 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 にします。

  1. 範囲を選ぶ

    E 列と F 列 (E2 から F33) を選びます。

  2. カスタム数値形式を開く

    上部のメニューの [表示形式] > [数字] > [カスタム数値形式] を押します。

  3. 形式を入れて適用する

    テキストボックスに [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.3338
7:300.31257.5
160:00約 6.667160
セルの表示と、計算に使われる中の値の対応です。

所定の労働日数を出す

月の出勤日数と比べるために、その月の平日の数を出しておくと便利です。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 で計算するか、勤怠管理の専用のサービスを使うほうが間違いが起きにくくなります。

シートナビ 編集部Excel・Google スプレッドシート・GAS・VBA で仕事を楽にする、そのまま使える手順とテンプレート集

次に読む