GASで作る!タイムカードシステムを全自動化する究極ガイド

はじめに:なぜ「タイムカード自動化」が今求められているのか?

「出勤・退勤の打刻が面倒」
「タイムカード管理に時間がかかる」
「集計ミスで給与計算にズレが出る」

こんな悩み、ありませんか?
実はこれ、すべて**Google Apps Script(GAS)**で一発解決できます。

GASなら、

  • 出勤退勤をワンクリックで記録

  • 勤怠データをリアルタイムで集計

  • 月末の締め作業もほぼゼロ

しかも、無料で・誰でも・スプレッドシート上で完結できるのです。

この記事では、初心者でもできる「GASを使ったタイムカードシステムの自動化方法」を、わかりやすく完全ガイドします。


GASで作るタイムカードシステムとは?

今回目指すのは、
「スプレッドシート+GAS」で完結する、シンプルで強力な勤怠管理ツールです。

機能概要は以下のとおり。

  • 出勤・退勤ボタンを押すだけで記録

  • 日付・時刻・社員名を自動記録

  • 遅刻・早退の判定も可能

  • 月間勤務時間・残業時間を自動集計

  • 休暇申請・管理もスプレッドシートで可能(応用編)

これがGASだけで無料で作れるのだから、使わない手はありません!


ステップ1:スプレッドシートを用意する

まずはベースとなるスプレッドシートを作成します。

  • シート名:「TimeCard」

  • 1行目(ヘッダー)に以下を設定

    • 社員名

    • 日付

    • 出勤時刻

    • 退勤時刻

    • 勤務時間

    • 備考(遅刻・早退メモ)

ポイント:
社員一人ひとりが入力するのではなく、「ボタンを押すだけ」で記録される仕組みを作ります!


ステップ2:出勤・退勤ボタンを作る

スプレッドシートのメニューに、「出勤」や「退勤」のボタンを追加します。

以下、GASのコード例です。

function clockIn() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TimeCard");
  var user = Session.getActiveUser().getEmail();
  var now = new Date();
  
  sheet.appendRow([user, formatDate(now), formatTime(now), "", "", ""]);
}

function clockOut() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TimeCard");
  var user = Session.getActiveUser().getEmail();
  var now = new Date();
  
  var lastRow = findLastClockIn(user);
  if (lastRow > 0) {
    sheet.getRange(lastRow, 4).setValue(formatTime(now)); // 退勤時刻を記録
    calculateWorkingHours(lastRow);
  }
}

// 日付整形
function formatDate(date) {
  return Utilities.formatDate(date, Session.getScriptTimeZone(), "yyyy/MM/dd");
}

// 時刻整形
function formatTime(date) {
  return Utilities.formatDate(date, Session.getScriptTimeZone(), "HH:mm:ss");
}

// 最後の出勤打刻行を探す
function findLastClockIn(user) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TimeCard");
  var data = sheet.getDataRange().getValues();
  
  for (var i = data.length - 1; i >= 1; i--) {
    if (data[i][0] == user && data[i][2] != "" && data[i][3] == "") {
      return i + 1;
    }
  }
  return -1;
}

// 勤務時間計算
function calculateWorkingHours(row) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TimeCard");
  var start = sheet.getRange(row, 3).getValue();
  var end = sheet.getRange(row, 4).getValue();
  
  if (start && end) {
    var diff = (parseTime(end) - parseTime(start)) / (1000 * 60 * 60);
    sheet.getRange(row, 5).setValue(diff.toFixed(2)); // 勤務時間(時間単位)
  }
}

// 時刻パース
function parseTime(timeStr) {
  var parts = timeStr.split(":");
  var date = new Date();
  date.setHours(parts[0]);
  date.setMinutes(parts[1]);
  date.setSeconds(parts[2]);
  return date;
}

これで、出勤時刻・退勤時刻を自動記録+勤務時間自動計算ができるようになります!


ステップ3:メニューに追加して誰でもワンクリックで打刻できるようにする

さらに使いやすくするために、スプレッドシートのメニューバーに「出勤」「退勤」ボタンを表示させます。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("タイムカード")
    .addItem("出勤", "clockIn")
    .addItem("退勤", "clockOut")
    .addToUi();
}

これをスクリプトに追加して保存するだけで、
スプレッドシートを開いたときに「タイムカード」というメニューが出現します。

社員は「出勤」または「退勤」をワンクリックするだけ!
超カンタンなタイムカード運用が実現します。


ステップ4:さらに自動化を極める応用テクニック

ここから先は応用編ですが、慣れてきたらぜひ取り入れてみてください!

■ 遅刻・早退自動判定

「9時以前ならOK、9時以降は遅刻」などのルールを自動判定できます。

function judgeLateness(row) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TimeCard");
  var start = sheet.getRange(row, 3).getValue();
  
  var hour = parseInt(start.split(":")[0]);
  if (hour >= 9) {
    sheet.getRange(row, 6).setValue("遅刻");
  }
}

これをclockIn関数の最後に呼び出せば、遅刻者自動判定付きタイムカードが作れます。


■ 月間勤務時間・残業時間集計

月末ごとに、社員ごとの総勤務時間、残業時間を集計して一覧にまとめるスクリプトも追加できます。

これは少し長くなるので、要望があればさらに詳しくお教えします!


実際に運用するときの注意点

■ スプレッドシート権限管理

誰でも編集できる状態だと改ざんリスクがあるため、編集権限を制限するか、フォーム打刻型に変更するのもありです。

■ 自動バックアップ

月末ごとに自動で勤怠データをコピーして保存するスクリプトを組んでおけば、万が一のデータ飛びにも備えられます。

■ 社員マスター管理

社員名やアカウントをスプレッドシートにリスト化しておき、ログイン情報と紐づけるとさらに正確な管理ができます。


まとめ:GASなら、あなた専用の勤怠管理ツールが無料で作れる!

今回紹介した方法をまとめると——

  • GAS×スプレッドシートでタイムカードシステムを自作

  • 出勤・退勤をワンクリックで記録

  • 勤務時間も自動計算

  • 遅刻・早退判定も簡単

  • 応用で残業時間管理、休暇管理までできる

これらが、たった数時間の作業と無料ツールだけで構築できてしまいます。

もう市販の高額な勤怠システムを契約する必要はありません。

さあ、あなたも今日からGASでタイムカード管理を完全自動化してみませんか?

Shop now