毎月の勤怠管理表を、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階層です。
- F列が「有休」なら空白
- 退勤≥出勤なら
D2-C2、そうでなければD2-C2+1(深夜跨ぎ補正) - 上記から休憩時間 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 連動で自動更新されますよ。手作業で日付を打ち直す手間がゼロになります。
シート複製の手順
- シートタブを右クリック → 「複製」
- シート名を「2026年5月」など対象月に変更
- B1 セルを
2026/05/01に書き換える
これだけで来月の勤怠表が完成します。出退勤入力欄(C列・D列・E列)と区分(F列)はリセットして、新しい月の入力を始めてください。
過去月のシートと連携させたい場合
複数月のシートをまたいで集計したい場合もあります。年間サマリシートを別に作り、QUERY 関数で各月シートのヘッダーから合計値だけを引っ張る運用も可能ですよ。週次集計を扱いたい場合はスプレッドシートのISOWEEKNUM関数の使い方も参考になります。
【手順7】印刷レイアウトとシート保護の設定
社内提出や記録保管のために印刷する場合、A4縦1ページに収める設定をしておくと、月初に提出する流れが楽になります。「ファイル → 印刷」で印刷プレビューを開いてください。
1ページに収める手順
- 用紙サイズ: A4
- 方向: 縦
- スケール: 「幅に合わせる」または「カスタム」で1ページ収まるように調整
- 余白: 「狭い」を選ぶと収まりが良くなる
- ヘッダーとフッター: 「ページ番号」「シート名」を有効化
「カスタムページ番号」セクションで「行と列を繰り返す」を有効にしましょう。見出し行(1行目)を指定すると、複数ページにまたがった場合も各ページに見出し行が表示されますよ。
シート保護で計算列を守る
入力欄以外を編集できないようにロックすると、誤って数式を消してしまう事故を防げます。「データ → シートと範囲を保護」で次のように設定してください。
- 範囲を「A:B, G:I」(自動表示・自動計算の列)に指定
- 「権限を設定」で「自分のみ」を選択
- C・D・E・F列(手入力欄)はロックしない
これで他のメンバーと共有しても、計算式が壊れる心配がなくなりますよ。
コピーして使えるテンプレート
ここまでの手順で作った勤怠管理表のレイアウトを、すぐに使える形でまとめます。新しいシートを開いて、次のとおりに入力してみてください。
セル別の数式リスト
| セル | 数式 | 役割 |
|---|---|---|
| B1 | 2026/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関数の使い方もあわせてどうぞ。
