スプレッドシートで勤怠管理表を作る方法|自動計算テンプレート付き

スポンサーリンク

毎月の勤怠管理表を、Googleスプレッドシートで自動化したいと考えていませんか。出退勤時刻を入れるだけで労働時間と残業時間がそろう仕組みは、関数を組み合わせれば自分でも作れますよ。月をまたいでも壊れない構造にすることも難しくありません。

専用ツールを導入する予算がない事務・総務担当者にとって、Googleスプレッドシートは強い味方になります。クラウドで共有できて、無料で使えて、関数の組み合わせ次第ではSaaSに匹敵する自動化も可能ですよね。

この記事では、Googleスプレッドシートで勤怠管理表をゼロから作る手順を7ステップで解説します。MOD・TEXT・NETWORKDAYS・TIME関数を実務文脈で組み合わせ、24時間超の合計表示・深夜跨ぎ計算・月またぎ自動更新・印刷レイアウトまで網羅しました。記事末尾にはコピーして使えるテンプレート構造も載せていますので、4月の新年度準備にぜひお役立てください。

スプレッドシートで勤怠管理表を作るメリット

Googleスプレッドシートで勤怠管理表を作る最大のメリットは、自分の運用に合わせて細かくカスタマイズできることです。市販の勤怠管理SaaSは便利な反面、月額費用がかかり、機能が固定化されています。

スプレッドシートなら、関数を組み合わせるだけで「うちの会社の所定労働時間に合わせた残業計算」「有休と特別休暇を分けた集計」など、自社ルールに合った自動化が可能です。さらに、Googleアカウントさえあれば追加コストはゼロですよね。

具体的には次の3つのメリットがあります。

  • 無料で運用できる: Googleアカウントだけで始められる
  • クラウド共有が前提: 上司と部下で同じシートを開いて確認できる
  • 関数で自動化できる: 出退勤を入れるだけで労働時間・残業・月合計が自動算出

事務・総務担当者にとって、Googleスプレッドシートは「コストをかけずに業務を仕組み化できるツール」です。新年度のタイミングで仕組みを作り直したい方には、特におすすめですよ。

完成イメージと用意するもの

これから作る勤怠管理表は、月単位で1シートを使う構成です。B1セルに「対象月(例: 2026/04/01)」を入れるだけで、A列に1日〜末日の日付と曜日が自動展開されます。

各行で出退勤時刻と休憩時間を入力すれば、労働時間・残業時間が自動計算されます。月合計と稼働日数もヘッダー部にまとまる仕組みですよ。

内容入力方法
A日付自動表示
B曜日自動表示
C出勤時刻手入力
D退勤時刻手入力
E休憩手入力(デフォルト 1:00)
F区分プルダウン選択
G備考手入力(任意)
H労働時間自動計算
I残業時間自動計算

用意するものは次のとおりです。

  • Googleアカウント(無料)
  • ブラウザでアクセスできる環境
  • 自社の所定労働時間(例: 1日8時間)

スプレッドシートの基本操作に不安がある方は、まずGoogleスプレッドシートの使い方入門をご覧ください。関数の入れ方やセル参照の仕組みをおさらいしておくと、この後の手順がスムーズに進みますよ。

【手順1】基本レイアウトを作る(日付・曜日の自動表示)

まず新しいスプレッドシートを開き、ヘッダー行とデータ部のレイアウトを作ります。シートの先頭に「対象月」を入れる仕組みにしておきましょう。月またぎでもこの1セルを変えるだけで日付列が更新できる構造になりますよ。

A1〜I1に列見出し(日付/曜日/出勤/退勤/休憩/区分/備考/労働時間/残業)を入れます。続いてB1セル(仮置き)に対象月を入力してください。今月分なら 2026/04/01 のように月初の日付を入れます。

日付の自動表示数式

A列の日付は、ROW関数(行番号を返す関数)と DATE 関数(年・月・日からシリアル値を作る関数)を組み合わせて自動展開します。A2セルに次の数式を入れます。

=IFERROR(DATE(YEAR($B$1),MONTH($B$1),ROW()-1),"")

ROW()-1 は「現在の行番号から1引いた値」を返すので、A2では1日、A3では2日…とずれていきます。31日に満たない月(2月など)は IFERROR(エラー時に代替値を返す関数)で空白に逃がす設計です。A33まで一括で数式をコピーしておけば、どの月でも壊れませんよ。

曜日の自動表示数式

B列の曜日は TEXT 関数(数値を指定書式の文字列に変換する関数)で表示します。B2に次の数式を入れます。

=IFERROR(TEXT(A2,"ddd"),"")

書式 ddd は「火」のような短縮表記、dddd は「火曜日」のフルネームです。記事のレイアウト都合で短く出したい場合は ddd がおすすめですよ。

土日の自動色付け(条件付き書式)

土曜と日曜は、条件付き書式(特定の条件で自動的に色を変える機能)で背景色を変えると視認性が上がります。

A2:I33を選択して「表示形式 → 条件付き書式 → カスタム数式」を選び、次の式を設定してください。

=WEEKDAY($A2)=7

WEEKDAY 関数(日付から曜日番号を返す関数)は日曜=1、土曜=7を返します。土曜は薄い水色、日曜は薄いピンクなど、控えめな色を選ぶと印刷したときも見やすいですよ。詳しい操作はスプレッドシートの条件付き書式の使い方も参考にしてください。

【手順2】出退勤時刻の入力欄と労働時間の自動計算

C列(出勤)とD列(退勤)は手入力欄です。8:30 のように半角コロン区切りで入力すれば、スプレッドシートが自動的に時刻として認識します。

E列(休憩)にはデフォルトで 1:00 を入れておきます。固定値でも数式でもどちらでも構いません。

労働時間の数式(深夜跨ぎ対応)

労働時間(H列)は「退勤時刻 − 出勤時刻 − 休憩」で計算できます。ただし、22:00 出勤・翌6:00 退勤のような深夜跨ぎだと、単純な引き算では負の値になってしまいますよね。

そこで IF 関数で日付跨ぎを判定し、跨いでいる場合は +1(=1日ぶんのシリアル値)で補正します。H2セルに次の数式を入れてください。

=IFERROR(IF(F2="有休","",IF(D2-C2>=0,D2-C2,D2-C2+1)-E2),"")

長く見えますが、構造は次の3階層です。

  1. F列が「有休」なら空白
  2. 退勤≥出勤なら D2-C2、そうでなければ D2-C2+1(深夜跨ぎ補正)
  3. 上記から休憩時間 E2 を引く

MOD 関数(割り算の余りを返す関数)を使って =MOD(D2-C2,1)-E2 と書く流派もあります。短くてエレガントな書き方です。ただし IF を使った書き方のほうが「何を判定しているか」が読みやすいので、まずはこちらをおすすめしますよ。MOD関数自体についてはスプレッドシートのMOD関数の使い方|余りで詳しく解説していますので、興味があればあわせて読んでみてください。

【手順3】残業時間と所定外労働の自動振り分け

労働時間が出たら、所定労働時間(例: 8時間)を超えた分を残業として自動で切り出します。ここで活躍するのが TIME 関数(時・分・秒からシリアル値を作る関数)です。

I2セル(残業時間)に次の数式を入れます。

=IFERROR(MAX(0, H2-TIME(8,0,0)),"")

TIME(8,0,0) は「8時間ぶんのシリアル値」を返します。H2-TIME(8,0,0) で「8時間からの超過分」を計算する仕組みです。MAX 関数(最大値を返す関数)で 0 と比較することで「マイナスにならない」保護をかけているわけですね。

所定労働時間が7時間30分の会社なら TIME(7,30,0) に変えるだけ。フレックスや変形労働で月単位の所定が変わる場合も、TIME関数の引数を会社ルールに合わせて調整できます。

深夜残業(22時以降)を分けたい場合

22時以降の深夜残業を別カウントしたい場合は、もう一列追加して次のように書きます。

=IFERROR(MAX(0, MIN(D2,TIME(6,0,0)+1)-TIME(22,0,0)),"")

22時から翌6時までの範囲を切り出すロジックです。この記事のメインテーマからは外れるので、ベース版では省略して構いません。まずは「残業をひとくくりで集計する」シンプル版から始めて、運用しながら必要な列を増やしていく流れがおすすめですよ。

【手順4】有休・欠勤・出社区分のプルダウン化

F列の「区分」は、出社/在宅/有休/欠勤の4択のプルダウンにします。手で打ち込むより選択式のほうが早く、表記揺れ(「有休」「ゆうきゅう」「YK」など)も防げますよね。

F2:F33を選択し、「データ → データの入力規則 → 条件: プルダウン」を選んでください。選択肢に次のように4つ追加します。

  • 出社
  • 在宅
  • 有休
  • 欠勤

色分けまでしておくと、月の傾向が一目でわかるようになります。プルダウンの作り方や色付けの細かい手順はスプレッドシートのプルダウン作り方で詳しく解説していますので、初めての方はそちらをご覧くださいね。

有休・欠勤の自動カウント

ヘッダー部に「月の有休日数」「欠勤日数」を表示しておくと、月末の集計が楽になります。COUNTIF関数(条件に一致するセルを数える関数)でカウントできますよ。

=COUNTIF(F2:F33,"有休")
=COUNTIF(F2:F33,"欠勤")

これでヘッダーの該当セルが、その月の有休・欠勤日数を自動表示してくれます。

【手順5】月合計と稼働日数の集計(24時間超対応)

月合計はSUM関数(合計を返す関数)で簡単に出せます。ところがここに、勤怠管理ならではの落とし穴があるんです。

労働時間を単純に =SUM(H2:H33) で合計すると、表示が 0:00 に戻ってしまうことがあります。原因は、スプレッドシートが時刻を「シリアル値」として扱う仕組みにあります。24時間を超えると次の日として繰り上げてしまうため、月の労働時間(当然24時間超え)の表示でつまずきやすいんですよ。

24時間超を正しく表示する2つの方法

方法A: TEXT 関数で書式指定

数式の中で書式を指定する方法です。D1セルに次の数式を入れます。

=TEXT(SUM(H2:H33),"[h]:mm")

[h] の角括弧は「24時間で繰り上げず累計時間として表示する」スプレッドシート独特の書式記号です。これで月合計が 162:30 のように24時間超でも正しく表示されますよ。

方法B: セルの書式設定で [h]:mm を指定

数式は =SUM(H2:H33) のままにして、セル側の表示形式を [h]:mm にする方法もあります。「表示形式 → 数字 → カスタム数値形式」で [h]:mm を入力すれば設定できます。

数式が短くなる利点はありますが、シートを別の場所にコピーすると書式が崩れることがあります。安定運用なら方法Aの TEXT 関数版が扱いやすいですよ。

月の稼働日数を NETWORKDAYS で取得

ヘッダーに「月の稼働日数(土日と祝日を除いた営業日)」を表示するなら、NETWORKDAYS 関数(土日と祝日を除く営業日数を返す関数)を使います。

=NETWORKDAYS(B1, EOMONTH(B1,0), 祝日リスト範囲)

EOMONTH 関数(月末日を返す関数)で月末を取得します。第3引数に祝日リストの範囲(別シートの祝日マスタなど)を渡せば、その月の所定労働日数が自動表示されますよ。祝日リストはシート内の隅に列を作るか、別シート「祝日マスタ」を作って参照するのがおすすめです。

【手順6】月またぎでも壊れない自動更新の仕組み

ここまで作った数式は、すべて B1 セル(対象月)を参照する形になっています。つまり来月分のシートを作りたいときは、シートを複製して B1 を 2026/05/01 に書き換えるだけでOKです。

A列の日付、B列の曜日、月合計、稼働日数、有休カウントまで、すべて B1 連動で自動更新されますよ。手作業で日付を打ち直す手間がゼロになります。

シート複製の手順

  1. シートタブを右クリック → 「複製」
  2. シート名を「2026年5月」など対象月に変更
  3. B1 セルを 2026/05/01 に書き換える

これだけで来月の勤怠表が完成します。出退勤入力欄(C列・D列・E列)と区分(F列)はリセットして、新しい月の入力を始めてください。

過去月のシートと連携させたい場合

複数月のシートをまたいで集計したい場合もあります。年間サマリシートを別に作り、QUERY 関数で各月シートのヘッダーから合計値だけを引っ張る運用も可能ですよ。週次集計を扱いたい場合はスプレッドシートのISOWEEKNUM関数の使い方も参考になります。

【手順7】印刷レイアウトとシート保護の設定

社内提出や記録保管のために印刷する場合、A4縦1ページに収める設定をしておくと、月初に提出する流れが楽になります。「ファイル → 印刷」で印刷プレビューを開いてください。

1ページに収める手順

  • 用紙サイズ: A4
  • 方向: 縦
  • スケール: 「幅に合わせる」または「カスタム」で1ページ収まるように調整
  • 余白: 「狭い」を選ぶと収まりが良くなる
  • ヘッダーとフッター: 「ページ番号」「シート名」を有効化

「カスタムページ番号」セクションで「行と列を繰り返す」を有効にしましょう。見出し行(1行目)を指定すると、複数ページにまたがった場合も各ページに見出し行が表示されますよ。

シート保護で計算列を守る

入力欄以外を編集できないようにロックすると、誤って数式を消してしまう事故を防げます。「データ → シートと範囲を保護」で次のように設定してください。

  1. 範囲を「A:B, G:I」(自動表示・自動計算の列)に指定
  2. 「権限を設定」で「自分のみ」を選択
  3. C・D・E・F列(手入力欄)はロックしない

これで他のメンバーと共有しても、計算式が壊れる心配がなくなりますよ。

コピーして使えるテンプレート

ここまでの手順で作った勤怠管理表のレイアウトを、すぐに使える形でまとめます。新しいシートを開いて、次のとおりに入力してみてください。

セル別の数式リスト

セル数式役割
B12026/04/01対象月(手入力)
D1=TEXT(SUM(H2:H33),"[h]:mm")月合計(労働時間)
F1=TEXT(SUM(I2:I33),"[h]:mm")月合計(残業時間)
H1=COUNTIF(F2:F33,"有休")有休日数
J1=NETWORKDAYS(B1,EOMONTH(B1,0))稼働日数
A2=IFERROR(DATE(YEAR($B$1),MONTH($B$1),ROW()-1),"")日付自動表示
B2=IFERROR(TEXT(A2,"ddd"),"")曜日自動表示
H2=IFERROR(IF(F2="有休","",IF(D2-C2>=0,D2-C2,D2-C2+1)-E2),"")労働時間
I2=IFERROR(MAX(0,H2-TIME(8,0,0)),"")残業時間

A2・B2・H2・I2 の4つの数式は、A33・B33・H33・I33までコピーしておけばOKです。

条件付き書式の設定

  • 範囲: A2:I33
  • 数式: =WEEKDAY($A2)=7(土曜・薄水色)
  • 数式: =WEEKDAY($A2)=1(日曜・薄ピンク)

データ入力規則

  • 範囲: F2:F33
  • 条件: プルダウン
  • 値: 出社, 在宅, 有休, 欠勤

ここまで設定すれば、対象月を変えるだけで毎月使える勤怠管理表の完成です。自社用に列を増やしたり、所定労働時間を変えたりしても応用が効く構造になっていますよ。

よくあるつまずきと対処法

最後に、勤怠管理表を作っていてつまずきやすいポイントを4つ紹介します。

月合計が 0:00 になる

シリアル値が24時間で繰り上がる仕様が原因です。TEXT 関数で "[h]:mm" 書式を指定するか、セルの表示形式を [h]:mm に変えてください。「【手順5】月合計と稼働日数の集計」で詳しく解説しています。

深夜跨ぎの労働時間がマイナスになる

退勤時刻が出勤時刻より小さい場合の補正が必要です。IF と +1(=1日ぶんのシリアル値)を組み合わせる方法か、MOD(D2-C2,1) で正のシリアル値に変換する方法を使います。「【手順2】出退勤時刻の入力欄と労働時間の自動計算」を参照してください。

来月分のシートを作るのが面倒

B1セルに対象月を入れる構造にしておけば、シートを複製してB1だけ書き換えれば来月分が完成します。「【手順6】月またぎでも壊れない自動更新の仕組み」で解説しました。

入力欄に時刻以外の値が入ってしまう

データの入力規則で「時刻のみ受け付ける」を設定しておくと事故が減ります。「データ → データの入力規則 → 条件: 有効な日付」を選び、適用範囲を C2:E33 に設定してください。

まとめ

Googleスプレッドシートで勤怠管理表を作る7ステップを駆け足で解説しました。MOD・TEXT・NETWORKDAYS・TIME関数を使い分け、24時間超の合計表示や深夜跨ぎの計算、月またぎ自動更新までカバーしましたが、いかがでしたか。

ポイントを振り返ると次のとおりです。

  • B1セル(対象月)を中心にした「1セル変更で月またぎ更新」構造
  • TEXT関数の [h]:mm 書式で24時間超の合計を正しく表示
  • IF または MOD 関数で深夜跨ぎ労働時間に対応
  • TIME関数で残業境界(所定労働時間)を直接指定
  • NETWORKDAYS関数で月の稼働日数を自動取得
  • 条件付き書式・プルダウン・シート保護で実運用に耐える表に

専用ツール導入の前に、まずはGoogleスプレッドシートで自社運用に合った仕組みを作ってみるのがおすすめですよ。4月の年度切り替えタイミングで仕組みを整えておけば、1年間の勤怠管理がぐっと楽になります。

スプレッドシートの基礎をもう少し固めたい方はGoogleスプレッドシートの使い方入門、関連関数を深掘りしたい方はスプレッドシートのMOD関数の使い方もあわせてどうぞ。

タイトルとURLをコピーしました