・案件データベースから担当者別の進捗を自動集計
・完了、進行中、未着手を自動で分類
・ボタン1つで集計表を更新可能
このコードでできること
・担当者ごとの総案件数を集計
・完了、進行中、未着手件数を集計
・担当者別集計表を自動作成
GASコード
function createStaffSummary() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const wsData = ss.getSheetByName("案件データベース");
const wsOut = ss.getSheetByName("担当者別集計(GAS)");
const lastRow = wsData.getLastRow();
const data = wsData.getRange(2, 1, lastRow - 1, 9).getValues();
let summary = {};
data.forEach(row => {
const person = row[4];
const status = row[7];
if (!person) return;
if (!summary[person]) {
summary[person] = {
total: 0,
complete: 0,
progress: 0,
waiting: 0
};
}
summary[person].total++;
switch (status) {
case "完了":
summary[person].complete++;
break;
case "進行中":
summary[person].progress++;
break;
case "未着手":
summary[person].waiting++;
break;
}
});
// 出力エリア初期化
wsOut.getRange("B4:O14").clearContent();
// 列幅設定
[4, 7, 10, 13].forEach(col => {
wsOut.setColumnWidth(col, 30);
});
const startCols = [2, 5, 8, 11, 14, 2, 5, 8, 11, 14];
let count = 0;
for (let person in summary) {
if (count >= 10) break;
const topRow = count <= 4 ? 4 : 10;
const col = startCols[count];
const item = summary[person];
wsOut.getRange(topRow, col).setValue(person);
wsOut.getRange(topRow, col + 1).setValue("件数");
wsOut.getRange(topRow + 1, col).setValue("総件数");
wsOut.getRange(topRow + 1, col + 1).setValue(item.total);
wsOut.getRange(topRow + 2, col).setValue("完了");
wsOut.getRange(topRow + 2, col + 1).setValue(item.complete);
wsOut.getRange(topRow + 3, col).setValue("進行中");
wsOut.getRange(topRow + 3, col + 1).setValue(item.progress);
wsOut.getRange(topRow + 4, col).setValue("未着手");
wsOut.getRange(topRow + 4, col + 1).setValue(item.waiting);
// 担当者名太字
wsOut.getRange(topRow, col).setFontWeight("bold");
// 下罫線
wsOut.getRange(topRow, col, 1, 2)
.setBorder(false, false, true, false, false, false);
// 中央揃え
wsOut.getRange(topRow, col, 5, 1)
.setHorizontalAlignment("center")
.setVerticalAlignment("middle");
wsOut.getRange(topRow, col + 1)
.setHorizontalAlignment("center");
count++;
}
SpreadsheetApp.getUi().alert(
"担当者別集計を作成しました。内容を確認してください。"
);
}
カスタマイズ例
パターン①
担当者数を15名まで表示する
if (count >= 15) break;
パターン②
表示開始行を変更する
const topRow = count <= 4 ? 15 : 21;
よくあるエラー
症状
集計結果が表示されない
対処法
・シート名を確認する
・担当者列がE列か確認する
症状
実行時エラーが発生する
対処法
・担当者別集計(GAS)シートが存在するか確認する
・案件データベースシート名を確認する
サンプルファイル
このコードを試せるGoogleスプレッドシートを配布しています。
▶ サンプルシートをコピーする(前回までの完成版)
▶ 完成版シートをコピーする(案件管理システム_完成版)
関連記事
▶ GASでチェックボックスにチェックしたら別シートへ転記するコード
次回予告
次回は「GASで担当者別集計表をPDF保存するコード」を紹介予定です。
コメント