毎月の勤怠集計、Excelへの転記作業にうんざりしていませんか?
こういう状況、心当たりありませんか?
- 退勤時間をExcelに手入力しているため、数字を打ち間違えても誰も気づかない
- 打刻漏れした社員への確認連絡が、月末に10件以上たまっている
- 「先月の○○さんの残業時間って何時間でしたっけ?」と毎月同じことを聞かれる
自分も昔は月末になると、勤怠データのチェックだけで半日以上潰れていました。正直なところ、この作業が一番消耗しました。
GAS勤怠管理自動化を使えば、こうした状況をほぼゼロコストで解決できます。高価な勤怠管理システムを導入するほどの規模ではない、でも手作業は限界。そんな状況を解決するのが、Google Apps Script(GAS)を使った勤怠管理の自動化です。
Googleフォームとスプレッドシート、そしてGASを組み合わせ、費用ゼロで構築できる勤怠管理システムをテンプレート付きで解説していきます。
社内SEが抱える勤怠管理の課題と自動化のメリット
先に結論です。GASで勤怠管理を自動化すると、以下の課題が解決され、大きなメリットが生まれます。
| 課題 | GASによる解決策とメリット |
|---|---|
| 手作業での集計が大変 | GASが毎日自動で集計。月あたり5〜10時間の作業削減 |
| 打刻漏れやミスが多い | 打刻忘れを自動リマインド。入力ミスが減り、確認の手間が激減 |
| データがリアルタイムでない | 打刻後すぐにスプレッドシートに反映。いつでも最新状況を確認可能 |
| システムの導入コスト | 費用は0円。Google WorkspaceのアカウントがあればOK |
Google Workspaceをすでに利用している企業なら、追加コストなしですぐに始められるのが最大の魅力です。
ここで、実際にあった話として紹介させてください。
ある会社でExcelの共有ファイルで勤怠管理をしていたところ、複数人が同じファイルを開いて編集していたため、データが上書きされてしまうケースが頻発していました。気づいたときには1週間分のデータが消えており、社員への再入力依頼とその確認で数日を要したそうです。「ヤバい、うちもありえる」という話ではないでしょうか。フォームベースに切り替えるだけで、こうした事故はほぼ防げます。
GASで勤怠管理システムを自動化する基本構成
システムは非常にシンプルです。以下の3つのツールを連携させるだけで完成します。
- ① Googleフォーム: 従業員の打刻用インターフェース
- ② Googleスプレッドシート: 打刻データの格納と集計表
- ③ GAS(Google Apps Script): データの自動集計や通知を行うエンジン
この構成により、打刻から集計までの流れを完全に自動化できます。
関連記事:社内SEが自動化すべき業務10選|現場で使える具体例と実装手順
Googleフォームで打刻データを収集する方法
まずは、従業員が打刻するためのフォームを作成します。シンプルさが継続利用の鍵です。
以下の3項目を設定します。
- 氏名: プルダウン形式(従業員マスターシートと連携すると入力ミスが防げます)
- 打刻種別: ラジオボタン(出勤 / 退勤 / 休憩開始 / 休憩終了)
- 備考: テキスト形式(任意入力)
フォームが送信されると、タイムスタンプが自動で記録されるため、ユーザーが時刻を入力する必要はありません。
【重要】氏名の入力ミスを防ぐには
フォームの「氏名」欄は、「従業員マスター」シートに登録した氏名と完全一致している必要があります。スペースの有無や全角・半角の違いだけで集計が正しく動作しなくなるため、プルダウン形式で選択肢を固定することを強くおすすめします。
Google Workspaceをご利用の場合はさらに便利に
Google Workspace環境では、フォームの設定で「メールアドレスを収集する」をオンにすると、送信者のメールアドレスが自動で記録されます。このメールアドレスを「従業員マスター」シートの照合キーとして使うようにGASを改修すれば、氏名の入力が不要になり、打ち間違えや表記ゆれによるミスを大幅に減らせます。
このようなカスタマイズはコードを数十行変更するだけで実現でき、組織の規模や運用スタイルに合わせて少しずつ育てていけるのが、このシステムの醍醐味です。
Googleスプレッドシートでのデータ管理・集計
次に、打刻データを管理・集計するスプレッドシートを用意します。
- フォームの回答シート: Googleフォームからの打刻データが自動で蓄積されるシート(基本的に編集しません)
- 月次集計シート: 各従業員の労働時間を日次で集計するシート
- 従業員マスターシート: 従業員名簿
GASを活用した自動化スクリプトの作成例
GASは、日々の打刻データを自動で整形・集計する役割を担います。主な処理の流れは以下のとおりです。
- 毎日深夜にトリガーでスクリプトを実行
- 「フォームの回答」シートからその日の打刻データを取得
- 従業員ごと、打刻種別ごとにデータを整理
- 「月次集計」シートの対応する日付・従業員のセルに労働時間を書き込む
このスクリプトを「時間主導型トリガー」で毎日深夜に実行するよう設定すれば、翌朝には前日分の勤怠が自動で集計された状態になります。
⚠️ よくある落とし穴: GASの初回実行時に必要な「アカウントへのアクセス許可」を承認しないと、トリガーを設定してもスクリプトがエラーで停止します。必ず手動で一度実行し、承認プロセスを完了させてください。
テンプレートを活用した実践的なシステム構築手順
理論は分かっても、ゼロから作るのは大変です。そこで、すぐに使えるテンプレートを用意しました。この手順に沿えば、約30分で基本的なシステムが完成します。
1. テンプレートのコピー
勤怠管理自動化テンプレート(スプレッドシート) を開き、「コピーを作成」をクリックします。コピーしたスプレッドシートには、必要な関数やGASスクリプトが既に含まれています。
⚠️ セキュリティ上の注意:初回実行時に「このアプリはGoogleで確認されていません」という画面が表示されます。「詳細」→「○○に移動」→「許可」の順にクリックしてください。これは正常な動作です。



2. Googleフォームの作成と連携
新しいGoogleフォームを作成し、前述の項目例を参考に設定します。フォームの「回答」タブで「スプレッドシートにリンク」を選択し、保存先としてステップ1でコピーしたスプレッドシートを指定します。
打刻種別の選択肢は 出勤 / 退勤 / 休憩開始 / 休憩終了 の4つをラジオボタンで必ず設定してください
3. GASトリガーの設定
スプレッドシートの「拡張機能」>「Apps Script」を開きます。左メニューの「トリガー」(時計アイコン)をクリックし、「トリガーを追加」ボタンを押して以下のように設定します。
- 実行する関数:
dailySummary(テンプレート内の関数名) - イベントのソース:
時間主導型 - 時間ベースのトリガーのタイプ:
日付ベースのタイマー - 時刻:
午前 2 時~3 時(業務時間外の任意の時間)
保存ボタンを押し、承認を求められたら許可します。
4. テストと運用開始
作成したGoogleフォームから数回テスト打刻を行います。設定したトリガーの時刻を待つか、GASエディタでdailySummary関数を手動実行します。「月次集計シート」にデータが正しく反映されれば設定完了です。
実際に使ってみた結果
- かかった時間: 初期設定に約1.5〜2時間(テンプレート使用時)。2回目以降は30分程度で展開できます
- 削減できた時間: 月末の集計・確認作業が毎月約5〜8時間削減(目安として。チーム規模によって異なります)
- 詰まったポイント: タイムゾーン設定の確認を忘れていて、打刻時刻が9時間ずれた状態で集計されてしまいました。後述しますが、これは最初に確認しておくことをおすすめします
- 正直な感想: 最初のトリガー設定と権限承認まわりが若干わかりにくいですが、一度動き出すと本当に何もしなくてよくなります。月末に「あ、もう集計終わってる」という感覚は想像以上に快適です
結論(社内SEならこう使う)
このシステムは「作って終わり」ではなく、現場の声を拾いながら少しずつ育てるのが正解です。 まずフォーム打刻と自動集計だけ動かし、「使いにくい」「これも自動化できないか」という意見が出てきたらSlack連携や有給管理を追加する、というスモールスタートが一番うまくいきます。
勤怠管理システムをさらに効率化する応用機能
基本機能が完成したら、さらに便利な機能を追加していきましょう。
リマインダー通知やSlack連携の実装
打刻忘れは永遠の課題です。GASを使えば、リマインドも自動化できます。
メールリマインダー:
毎日18時頃にトリガーを設定し、その日の退勤打刻がない従業員をリストアップしてMailApp.sendEmail()を使ってリマインドメールを自動送信します。
Slack連携:
SlackのIncoming Webhook URLを取得し、GASのUrlFetchApp.fetch()を使うと、打刻時やエラー発生時に特定のチャンネルへ通知を飛ばせます。
⚠️ セキュリティ上の注意: Slack Webhook URLはスクリプト内にべた書きせず、GASのスクリプトプロパティ(「プロジェクトの設定」>「スクリプトプロパティ」)に格納して呼び出すようにしてください。URLが外部に漏れると誰でもSlackに投稿できる状態になります。
有給休暇管理や残業申請との連携
勤怠管理だけでなく、関連する申請業務も同じ仕組みで効率化できます。
有給休暇管理:
有給申請用のGoogleフォームと管理用スプレッドシートを別途作成します。月次集計シートからVLOOKUP関数などで参照し、出勤すべき日に申請があれば「有給」と表示させます。
残業申請:
同様に申請フォームを作成し、承認された残業時間と実績を突合する仕組みを構築できます。
⚠️ よくある落とし穴: タイムゾーンの設定ミスは頻発します。スプレッドシート(ファイル > 設定)とGASプロジェクト(プロジェクトの設定)の両方で、タイムゾーンが「(GMT+09:00) 東京」になっていることを必ず確認してください。これを忘れると、打刻時間が9時間ずれてしまいます。
よくある質問とトラブルシューティング
Q1. スマートフォンからでも打刻できますか?
はい、可能です。Googleフォームはレスポンシブデザインになっているため、URLを共有すればどのデバイスからでも簡単に打刻できます。スマートフォンのホーム画面にショートカットを追加しておくと、社員の利用率が上がります。
Q2. スクリプトがエラーで停止してしまいます。
まずはGASエディタの「実行数」メニューからログを確認してください。権限不足、参照しているシート名やセル範囲の間違いが原因のほとんどです。シート名は大文字・小文字・スペースまで完全一致が必要なので、コピーミスにも注意してください。
Q3. 誤って打刻した場合、修正はどうすればよいですか?
管理者が「フォームの回答」シートの該当行を直接修正します。その後、集計用のGASを手動で再実行すれば、月次集計シートにも修正が反映されます。
GASを使った勤怠管理の自動化は、社内SEが価値を発揮しやすい絶好のテーマです。一度仕組みを作ってしまえば、面倒な手作業から解放され、より重要な業務に集中できるようになります。
あなたの職場でも、月末になるたびに同じ確認作業を繰り返している状況はありませんか? まずは今回のテンプレートを使ってスモールスタートしてみてください。実際に動くものを見ることで、次の自動化アイデアが自然と湧いてくるはずです。
関連記事:VBAとPower Automateの違い|社内SEはどちらを使うべきか【結論あり】
関連記事:ChatGPTでExcel業務を自動化する方法|社内SEが使える関数・VBA活用例

