GASでスプレッドシートのデータを自動集計する方法

GASでスプレッドシートのデータを自動集計する方法

記事
IT・テクノロジー

■ はじめに:GASでスプレッドシート自動集計のメリット

どうも、GASおじです。中小企業の経営者やフリーランスの皆さん、日々の売上や顧客データの集計、手作業でやっていませんか?それ、かなりの時間とコストのムダですよ。GAS(Google Apps Script)を使えば、Googleアカウントの利用枠内で追加の専用SaaS料金なしに、自動化ができる。もちろんApps Scriptのquotaや実行上限はありますが、賢く使えば十分効果的です。

今回は、既存のデータを壊さず、安全にバックアップを取りつつ、新しい日時付きのシートに自動集計結果を書き出す方法をおじさん流で紹介します。これでデータの誤消去リスクもなく、安心して業務効率アップを図れますよ。


■ 初期設定と必要権限について

まず初めに、GoogleスプレッドシートとGASを使うための準備を簡単に説明します。

・スプレッドシートの準備 集計したいデータが入ったスプレッドシートを用意します。シート名やデータ範囲は後でコード内で指定します。
・Google Apps Scriptのプロジェクト作成 スプレッドシートのメニュー「拡張機能」→「Apps Script」を開き、新規プロジェクトを作成。
・必要な権限 - スプレッドシートの読み書き権限 - 新規シートの作成権限 - ファイルの作成権限(別ファイルに出力する場合) これらは初回スクリプト実行時にGoogleから求められますので、必ず許可してください。
・個人情報の取り扱い GASはGoogleのクラウド上で動作します。機密性が高いデータを扱う場合は、社内ルールや法令を遵守し、必要に応じてアクセス管理を厳重に行いましょう。
・トリガー設定(任意) 定期的に自動集計したい場合は、インストール型トリガーで時間主導のトリガーを設定してください。


■ コード例:安全にデータを集計して日時付きシートへ出力

ここで紹介するコードは以下のポイントを守っています。

・既存データを削除・上書きしない
・新規に日時付きシートを作成して書き込む
・入力値の検証あり
・バッチ書き込みで処理効率アップ
・バックアップやロールバック機能付き
・削除系APIは一切使わない

function autoSummarize() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = ss.getSheetByName('売上データ'); // 集計対象シート名
if (!sourceSheet) {
throw new Error('売上データシートが見つかりません');
}

// データ取得(ヘッダー含む)
const dataRange = sourceSheet.getDataRange();
const data = dataRange.getValues();

// 入力検証:最低2行以上(ヘッダー+データ1行以上)あるか確認
if (data.length < 2) {
throw new Error('集計するデータがありません');
}

// 売上集計の例:日付ごとの合計売上を計算する(1列目:日付、3列目:売上金額)
const header = data[0];
const rows = data.slice(1);

// 集計用Map(日付をキーに売上合計)
const summaryMap = new Map();

rows.forEach(row => {
const date = row[0];
const amount = row[2];

// 日付と金額の型チェック
if (!(date instanceof Date) || typeof amount !== 'number' || isNaN(amount)) {
// 無効な行はスキップ
return;
}

const key = Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy-MM-dd');
summaryMap.set(key, (summaryMap.get(key) || 0) + amount);
});

// 集計結果を配列に変換(ヘッダー付き)
const output = [['日付', '売上合計']];
summaryMap.forEach((total, date) => {
output.push([date, total]);
});

// バックアップとして元データをコピーした新しいシートを作成
const backupSheetName = 'バックアップ_' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
sourceSheet.copyTo(ss).setName(backupSheetName);

// 新しい日時付きシートに集計結果を書き込む
const newSheetName = '集計結果_' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const newSheet = ss.insertSheet(newSheetName);

// バッチ書き込み
newSheet.getRange(1, 1, output.length, output[0].length).setValues(output);

Logger.log('集計処理が完了しました。シート名: ' + newSheetName);
}


■ コスト削減のポイントと計算例

このスクリプト導入で得られるコスト削減は、主に「作業時間の削減」による人件費節約です。

例えば、

・手作業集計にかかる時間:1日30分
・時給:2,000円
・月間稼働日数:20日
の場合、30分 × 20日 = 10時間/月10時間 × 2,000円 = 20,000円/月 の人件費削減効果が見込めます。

あくまで仮定の数字ですが、こうした計算式をもとに費用対効果を検討してください。導入にかかる費用はGoogleアカウントの利用枠内で追加SaaS料金なしなので、初期コストはほぼゼロと考えられます。ただしApps Scriptのquotaや実行上限はあるので、大量データや高頻度実行の際は要注意です。


■ 復元手順とトラブル対策

・バックアップシートの活用 スクリプト実行時に元データをコピーしておくので、誤った集計や操作があっても元データをバックアップシートから復元可能。
・トリガー設定時の注意 自動実行で問題が起きた場合は、トリガーを一時停止して手動実行で動作確認を行う。
・権限エラー時 権限不足の場合は再認証を促すメッセージが出るので、Googleアカウントでスクリプトを承認し直してください。


□ まとめ

GASを使ったスプレッドシートの自動集計は、コスト削減と業務効率化に直結します。ただし既存データを消さずに安全に扱うことが、長く使い続けるコツ。今回紹介した方法なら、バックアップも取れて安心ですし、Googleアカウントの利用枠内で追加の専用SaaS料金なしで運用可能。これで経営者やフリーランスの皆さんも賢く働けますよ。

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す