【GAS】getLastRow()でプロジェクト管理の進捗状況を自動集計

【GAS】getLastRow()でプロジェクト管理の進捗状況を自動集計

プロジェクト管理において、進捗状況の把握は非常に重要です。しかし、手動でデータを集計し、進捗状況を更新するのは時間と手間がかかります。そこで、Google Apps Script(GAS)のgetLastRow()関数を活用することで、プロジェクトの進捗状況をスプレッドシートから自動的に集計し、効率的なプロジェクト管理を実現できます。

getLastRow()関数の基本

getLastRow()関数は、指定したシート内でデータが入力されている最後の行番号を取得するために使用されます。この関数を使うことで、スプレッドシートに追加された新しいタスクや更新されたタスクの情報を自動的に検出し、集計に含めることができます。

function getLastRowExample() {
// スプレッドシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// シートを取得
const sheet = ss.getSheetByName("タスクリスト");
// 最終行を取得
const lastRow = sheet.getLastRow();
// ログに出力
Logger.log("最終行: " + lastRow);
}

プロジェクト管理におけるgetLastRow()の実装

プロジェクト管理のスプレッドシートで、タスクの追加や進捗状況の更新があった場合、getLastRow()関数を使って最新のデータ範囲を取得し、集計を行うことができます。以下に、具体的な実装例を示します。

タスクリストの自動集計

タスクリストのスプレッドシートから、未完了タスクの数を自動的に集計する例です。

function countIncompleteTasks() {
// スプレッドシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// シートを取得
const sheet = ss.getSheetByName("タスクリスト");
// 最終行を取得
const lastRow = sheet.getLastRow();
// データの範囲を指定
const range = sheet.getRange(2, 1, lastRow-1, 3); // 2行目からデータ開始、3列(タスク名、担当者、ステータス)
// データを取得
const data = range.getValues();

let incompleteCount = 0;
// データをループして未完了タスクをカウント
for (let i = 0; i < data.length; i++) {
const status = data[i][2]; // ステータス列
if (status !== "完了") {
incompleteCount++;
}
}
// 結果をログに出力
Logger.log("未完了タスク数: " + incompleteCount);
// 集計結果をシートに書き込む場合
const resultSheet = ss.getSheetByName("集計シート");
resultSheet.getRange("B2").setValue(incompleteCount);
}

進捗状況の自動更新

タスクのステータスが更新された際に、自動的に進捗状況を計算し、ダッシュボードに表示する例です。

function updateProgressDashboard() {
// スプレッドシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// タスクリストのシートを取得
const taskSheet = ss.getSheetByName("タスクリスト");
// ダッシュボードのシートを取得
const dashboardSheet = ss.getSheetByName("ダッシュボード");
// タスクリストの最終行を取得
const lastRow = taskSheet.getLastRow();
// 全タスク数を取得(ヘッダー行を除く)
const totalTasks = lastRow - 1;
// 完了タスク数をカウント
let completedTasks = 0;
const statusColumn = 3; // ステータス列
for (let i = 2; i <= lastRow; i++) {
const status = taskSheet.getRange(i, statusColumn).getValue();
if (status === "完了") {
completedTasks++;
}
}
// 進捗率を計算
const progress = (completedTasks / totalTasks) * 100;
// ダッシュボードに書き込む
dashboardSheet.getRange("B2").setValue(progress + "%");
}

よくある問題とトラブルシューティング

  • getLastRow()が正しい行数を返さない:

    • シートに空白行が含まれている場合、getLastRow()は空白行を無視して、データが入力されている最後の行を返します。空白行を削除するか、getDataRange().getNumRows()を使用することを検討してください。

  • スクリプトの実行速度が遅い:

    • getLastRow()を繰り返し呼び出すと、スクリプトの実行速度が遅くなる可能性があります。最終行の値を一度取得し、変数に保存して再利用するようにしてください。

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

  • 特定の条件に合致するタスクの集計:

    • 担当者別、優先度別など、特定の条件に合致するタスクを集計するようにカスタマイズできます。

  • ガントチャートの自動生成:

    • タスクの開始日、終了日を基に、ガントチャートを自動生成するスクリプトを作成できます。

まとめ

GASのgetLastRow()関数を活用することで、プロジェクト管理における進捗状況の自動集計が実現し、大幅な業務効率化が期待できます。この記事で紹介したコード例を参考に、ぜひご自身のプロジェクト管理に役立ててください。