GAS Range.getValuesで勤怠管理を効率化!残業時間集計を自動化する具体例

GAS Range.getValuesで勤怠管理を効率化!残業時間集計を自動化する具体例

勤怠管理は、企業にとって重要な業務の一つですが、手作業で行うと時間と手間がかかります。特に、従業員の残業時間を集計するのは煩雑な作業です。そこで、Google Apps Script(GAS)のRange.getValues()メソッドを活用することで、勤怠管理を効率化し、残業時間の集計を自動化することができます。

Range.getValues()とは?GASの基本を解説

Range.getValues()は、スプレッドシート上の指定された範囲のセルの値を2次元配列として取得するGASのメソッドです。取得したデータは、GASのスクリプト内で処理することができます。このメソッドを利用することで、スプレッドシートからデータを抽出し、加工して、別の場所に書き出す、といった処理を自動化できます。

Range.getValues()の基本的な使い方

Range.getValues()メソッドは、以下のように使用します。

function getValuesFromRange() {
// スプレッドシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// シートを取得
const sheet = ss.getActiveSheet();
// 範囲を指定 (例: A1からC10までの範囲)
const range = sheet.getRange("A1:C10");
// 範囲の値を二次元配列として取得
const values = range.getValues();
// 取得した値をログに出力
Logger.log(values);
}

勤怠管理におけるRange.getValues()の実装例

ここでは、Range.getValues()を活用して、勤怠管理を効率化する具体的な例をいくつか紹介します。

1. 従業員ごとの勤務時間集計

従業員ごとの勤務時間を集計し、残業時間を算出するスクリプトです。スプレッドシートのA列に社員名、B列に出勤時間、C列に退勤時間が入力されていると仮定します。

function calculateWorkingHours() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
// ヘッダー行をスキップ
data.shift();
let result = {};
data.forEach(row => {
const employeeName = row[0];
const startTime = row[1];
const endTime = row[2];
if (employeeName && startTime && endTime) {
// 出勤時間と退勤時間の差を計算 (ミリ秒単位)
const workingTimeMs = endTime.getTime() - startTime.getTime();
// ミリ秒を時間に変換
const workingTimeHours = workingTimeMs / (1000 * 60 * 60);
// 結果を格納
if (result[employeeName]) {
result[employeeName] += workingTimeHours;
} else {
result[employeeName] = workingTimeHours;
}
}
});
// 結果をログに出力
Logger.log(result);
// 集計結果をシートに書き出す処理は省略
}

2. 特定期間の勤務時間集計

特定の期間の勤務時間を集計するスクリプトです。日付の範囲を指定して、その期間内の勤務時間のみを集計します。

function calculateWorkingHoursForPeriod(startDate, endDate) {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
data.shift(); // ヘッダー行をスキップ
let result = {};
data.forEach(row => {
const employeeName = row[0];
const workDate = row[3]; // D列に日付が入力されていると仮定
const startTime = row[1];
const endTime = row[2];

//日付が指定期間内かどうかを確認
if (workDate >= startDate && workDate <= endDate) {
if (employeeName && startTime && endTime) {
const workingTimeMs = endTime.getTime() - startTime.getTime();
const workingTimeHours = workingTimeMs / (1000 * 60 * 60);
if (result[employeeName]) {
result[employeeName] += workingTimeHours;
} else {
result[employeeName] = workingTimeHours;
}
}
}
});
Logger.log(result);
// 集計結果をシートに書き出す処理は省略
}

// 使用例:
function testCalculateWorkingHoursForPeriod() {
const startDate = new Date("2024/01/01");
const endDate = new Date("2024/01/31");
calculateWorkingHoursForPeriod(startDate, endDate);
}

3. 残業時間の自動計算

定時時間を超える残業時間を自動で計算するスクリプトです。例えば、1日の定時時間を8時間と設定し、それを超えた時間を残業時間として計算します。

function calculateOvertime() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
data.shift(); // ヘッダー行をスキップ
const regularHours = 8; // 定時時間
let result = {};
data.forEach(row => {
const employeeName = row[0];
const startTime = row[1];
const endTime = row[2];
if (employeeName && startTime && endTime) {
const workingTimeMs = endTime.getTime() - startTime.getTime();
const workingTimeHours = workingTimeMs / (1000 * 60 * 60);
let overtimeHours = 0;
if (workingTimeHours > regularHours) {
overtimeHours = workingTimeHours - regularHours;
}
if (result[employeeName]) {
result[employeeName] += overtimeHours;
} else {
result[employeeName] = overtimeHours;
}
}
});
Logger.log(result);
// 集計結果をシートに書き出す処理は省略
}

勤怠管理でよくある問題とトラブルシューティング

勤怠管理でRange.getValues()を使用する際によくある問題と、その解決策を以下に示します。

  • 日付の形式が正しくない:GASで日付として認識される形式で入力されているか確認してください。Utilities.parseDate()などを利用して、文字列から日付オブジェクトに変換することも可能です。
  • データの範囲指定が誤っている:getRange()で指定する範囲が、データを含む範囲と一致しているか確認してください。
  • スクリプトの実行権限がない:スクリプトの実行には、スプレッドシートへのアクセス権が必要です。権限設定を確認してください。

カスタマイズ方法と応用例

これらのスクリプトは、必要に応じてカスタマイズできます。例えば、以下のような応用が考えられます。

  • 特定の部署のみのデータを集計する:部署名が記載された列を参照し、特定の部署のデータのみを抽出する。
  • 祝日を除外する:祝日リストを作成し、勤務時間が祝日に該当する場合は集計から除外する。
  • 集計結果をメールで送信する:集計結果を定期的にメールで関係者に送信する。

まとめ

GASのRange.getValues()メソッドを活用することで、勤怠管理における残業時間の集計を自動化し、業務効率を大幅に向上させることができます。今回紹介したコード例を参考に、ぜひご自身の環境に合わせてカスタマイズし、活用してみてください。

PR

未経験からSNSデザインを学び、在宅ワークで収入を得たい方へ。
Flap DESIGNは、デザインスキルから案件獲得までを徹底サポートするオンラインスクールです。現役プロがマンツーマンで指導するため、挫折しにくい環境が強み。
さらに、受講期間中に案件を獲得できなかった場合は、売上が立つまで営業サポート期間を延長する「売上保証制度」も魅力です。
副業として月8〜20万円を目指したい会社員の方、出産・育児を機に新しい働き方を求める方、フリーランスとして独立を目指す方など、ライフスタイルに合わせた働き方を実現したい方にぴったりのサービスです。まずは無料相談で詳細を聞いてみませんか?

未経験から始める!SNSデザインスクール