GASで勤怠管理を効率化!getLastRow()で最終行を取得し、出退勤記録を自動追記
本記事では、Google Apps Script(GAS)のgetLastRow()
関数を活用して、勤怠管理システムの効率化を図る方法を解説します。getLastRow()
は、スプレッドシートの最終行を取得できる便利な関数です。これを利用することで、手動での行数確認や入力位置の特定を省き、出退勤記録の自動追記を実現できます。
getLastRow()関数の基本
getLastRow()
関数は、指定したシートのデータが入力されている最終行の番号を返します。空のシートの場合、1を返します。この関数を使うことで、データの追加位置を動的に特定し、常に最終行の次の行にデータを追記できます。
//getLastRow()の基本的な使い方
function getLastRowExample() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
console.log(lastRow); // 最終行の番号をログに出力
}
勤怠管理システムへの応用
勤怠管理において、getLastRow()
は非常に有効です。出勤・退勤の記録をスプレッドシートに追記する際、毎回最終行を確認する手間を省き、自動化できます。以下に具体的な実装例を示します。
実装例1:出勤時間の自動記録
指定したセルに「出勤」と入力されたら、自動で現在時刻を記録するスクリプトです。
// 出勤時間を自動記録する関数
function recordAttendance() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const attendanceColumn = 1; // A列を出勤/退勤の入力列とする
const timeColumn = 2; // B列を時刻記録列とする
// A列の最終行に「出勤」と入力されているか確認
const attendanceValue = sheet.getRange(lastRow, attendanceColumn).getValue();
if (attendanceValue === "出勤") {
// 現在時刻を取得
const now = new Date();
// 時刻をB列の最終行の次の行に記録
sheet.getRange(lastRow + 1, timeColumn).setValue(now);
}
}
実装例2:退勤時間の自動記録と勤務時間計算
退勤時間を記録し、勤務時間を自動計算するスクリプトです。出勤時間と退勤時間の差を計算し、勤務時間として記録します。
// 退勤時間を自動記録し、勤務時間を計算する関数
function recordLeaving() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const leavingColumn = 1; // A列を退勤入力列とする
const leavingTimeColumn = 3; // C列を退勤時刻記録列とする
const workTimeColumn = 4; // D列を勤務時間記録列とする
// A列の最終行に「退勤」と入力されているか確認
const leavingValue = sheet.getRange(lastRow, leavingColumn).getValue();
if (leavingValue === "退勤") {
// 退勤時刻をC列の最終行の次の行に記録
const now = new Date();
sheet.getRange(lastRow + 1, leavingTimeColumn).setValue(now);
// 出勤時間を取得(一つ上の行のB列)
const attendanceTime = sheet.getRange(lastRow, 2).getValue();
// 勤務時間を計算
const workTimeMs = now.getTime() - attendanceTime.getTime();
const workTimeHours = workTimeMs / (1000 * 60 * 60);
// 勤務時間をD列の最終行の次の行に記録
sheet.getRange(lastRow + 1, workTimeColumn).setValue(workTimeHours);
}
}
実装例3:毎日指定時間に最終行へ日付を自動追記
毎日指定された時間に、スプレッドシートの最終行に日付を自動的に追記するスクリプトです。これにより、日ごとの勤怠記録を自動で開始できます。
// 毎日指定時間に日付を自動追記する関数
function insertDateDaily() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const dateColumn = 1; // A列を日付列とする
// 今日の日付を取得
const today = new Date();
// A列の最終行の次の行に日付を記録
sheet.getRange(lastRow + 1, dateColumn).setValue(today);
}
// トリガー設定例:毎日午前9時に実行
// 1. スクリプトエディタを開く
// 2. 「編集」>「現在のプロジェクトのトリガー」を選択
// 3. トリガーを設定(時間主導型、日ベース、午前9時)
よくある問題とトラブルシューティング
- 最終行が正しく取得できない:シートに非表示の行や空白の行が含まれている場合、
getLastRow()
が期待通りの値を返さないことがあります。getDataRange().getLastRow()
を使用すると、データ範囲に基づいて最終行を取得できます。 - 時刻が正しく記録されない:スプレッドシートのタイムゾーン設定が正しくない場合、記録される時刻がずれることがあります。スプレッドシートの設定を確認し、タイムゾーンを正しく設定してください。
- スクリプトがエラーになる:権限設定が不十分な場合、スクリプトがエラーになることがあります。スクリプト実行時に必要な権限を付与してください。
カスタマイズ方法と応用例
- 出退勤時間のフォーマット:
Utilities.formatDate()
を使用すると、時刻の表示形式をカスタマイズできます。 - 休憩時間の記録:休憩開始・終了時間を記録し、勤務時間から休憩時間を差し引く処理を追加できます。
- 複数シートへの対応:複数のシートで勤怠管理を行う場合、シート名を指定して
getSheetByName()
でシートを取得し、それぞれのシートに対して処理を行うようにスクリプトを修正します。
まとめ
GASのgetLastRow()
関数を活用することで、勤怠管理システムの効率化が可能です。出退勤記録の自動追記や勤務時間の自動計算など、様々な業務を自動化し、人的ミスを減らすことができます。本記事で紹介したコード例を参考に、ぜひ自社の勤怠管理システムを改善してみてください。