有料級の勤怠管理システムを誰でも簡単に無料で作って運用する方法
企業やチームの運営で欠かせない「勤怠管理」。
専用の勤怠管理システムを導入すれば便利ですが、コストがかかったり、細かいカスタマイズが難しかったりする場合もあります。
そんなとき、GoogleスプレッドシートとGoogle Apps Script(以下、GAS)を使えば、柔軟で費用のかからない勤怠管理システムを構築できます。
本記事では、その手順を分かりやすく解説します。
ステップ1:基本的な勤怠データの設計
まずは、スプレッドシートに必要なデータを設計します。
1. シートの作成
「勤怠管理」という名前のスプレッドシートを作成し、以下のようなカラムを用意します。
• 社員ID
• 氏名
• 日付
• 出勤時刻
• 退勤時刻
• 勤務時間
2. レイアウト例
社員ID | 氏名 | 日付 | 出勤時刻 | 退勤時刻 | 勤務時間
1001 | 山田太郎 | 2024/12/10 | 09:00 | 18:00 | 9:00
1002 | 佐藤花子 | 2024/12/10 | 08:45 | 17:45 | 9:00
3. 計算式の準備
勤務時間を計算するために、以下のような計算式を使用します。
勤務時間 = TEXT(退勤時刻 - 出勤時刻, "h:mm")
これにより、基本的なデータ構造が完成します。
ステップ2:GASで打刻機能を追加する
次に、出勤・退勤の打刻機能を実装します。
1. GASスクリプトの作成
1. スプレッドシートのメニューから「拡張機能」→「Apps Script」をクリックします。
2. 以下のスクリプトを貼り付けます。
function recordAttendance(action) {
// スプレッドシートとシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("勤怠管理");
// 現在日時を取得
const now = new Date();
// ユーザー情報(ここでは社員IDを固定値として例示)
const employeeId = "1001"; // 本番では動的に取得する
// 勤怠データを検索
const lastRow = sheet.getLastRow();
const dataRange = sheet.getRange(2, 1, lastRow, 6).getValues();
let found = false;
// 勤怠データの更新または新規作成
for (let i = 0; i < dataRange.length; i++) {
if (dataRange[i][0] == employeeId && dataRange[i][2] == formatDate(now)) {
found = true;
if (action === "出勤") {
sheet.getRange(i + 2, 4).setValue(formatTime(now));
} else if (action === "退勤") {
sheet.getRange(i + 2, 5).setValue(formatTime(now));
}
break;
}
}
if (!found) {
// 新しい勤怠記録を追加
const newRow = [employeeId, "山田太郎", formatDate(now), "", "", ""];
if (action === "出勤") {
newRow[3] = formatTime(now);
} else if (action === "退勤") {
newRow[4] = formatTime(now);
}
sheet.appendRow(newRow);
}
}
// 日付フォーマット関数
function formatDate(date) {
return Utilities.formatDate(date, "Asia/Tokyo", "yyyy/MM/dd");
}
// 時刻フォーマット関数 function formatTime(date) {
return Utilities.formatDate(date, "Asia/Tokyo", "HH:mm");
}
2. 実行方法
• recordAttendance("出勤") を実行すると出勤時刻が記録されます。
• recordAttendance("退勤") を実行すると退勤時刻が記録されます。
ステップ3:打刻をボタン化する
毎回スクリプトエディタを開いて実行するのは面倒なので、シートにボタンを設置します。
1. ボタンの設置
• スプレッドシートの「挿入」→「図形描画」を選択します。
• 四角形を作り、「出勤」または「退勤」とラベルをつけます。
• ボタンを選択して右クリックし、「スクリプトを割り当て」を選択します。
• 「recordAttendance」と入力します。
2. 勤怠管理システムの完成
これで、ボタンをクリックするだけで打刻できるようになります。
ステップ4:通知機能の追加(オプション)
勤怠データに基づき、例えば定時退勤できなかった社員にメール通知を送る機能も実装可能です。
function sendReminder() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("勤怠管理");
const dataRange = sheet.getRange(2, 1, sheet.getLastRow(), 6).getValues();
const now = new Date();
const currentHour = now.getHours();
for (let i = 0; i < dataRange.length; i++) {
const退勤時刻 = dataRange[i][4];
if (!退勤時刻 && currentHour >= 18) {
GmailApp.sendEmail("example@domain.com", "退勤忘れの通知", `社員ID: ${dataRange[i][0]} 様、退勤打刻を忘れていませんか?`);
}
}
}
まとめ
GoogleスプレッドシートとGASを活用すれば、無料で柔軟な勤怠管理システムを構築できます。
専用ソフトに頼らず、自社の業務フローに合った形で運用をカスタマイズできるのが大きなメリットです。
ぜひ、この方法を試してみてください!