GAS(getLastRow)で勤怠管理を効率化!自動追記で業務改善

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()関数を活用することで、勤怠管理システムの効率化が可能です。出退勤記録の自動追記や勤務時間の自動計算など、様々な業務を自動化し、人的ミスを減らすことができます。本記事で紹介したコード例を参考に、ぜひ自社の勤怠管理システムを改善してみてください。