月次報告書をスプレッドシートとGASで自動生成

月次報告書をスプレッドシートとGASで自動生成

記事
IT・テクノロジー
月次報告書をスプレッドシートとGASで自動生成


■ はじめに:中小企業やフリーランスの強い味方、おじさんのGAS活用術

どうも、GASおじです。中小企業の経営者さんやフリーランスの皆さん、月次報告書の作成で毎月の手間に頭を抱えてませんか?Excelやスプレッドシートで手作業すると、ミスも多いし時間もかかる。そこでおじさんが提案するのは、GoogleスプレッドシートとGoogle Apps Script(以降GAS)での自動化です。

GASはGoogleアカウントの利用枠内で動くので専用SaaSの追加料金なし。ただしApps Scriptのquotaや実行時間の上限はあるので注意してくださいね。この記事では、既存データを消さずに安全に月次報告書を生成する具体的なコード例や初期設定、権限、復元方法まで解説します。


■ 月次報告書自動生成の全体の流れ

まずは大まかな流れを説明します。

・既存のデータシートから必要なデータを読み取る
・新規に日時付きの報告書用スプレッドシート(またはシート)を作成し、そこに集計結果を書き込む(既存データは触らない)
・書き込みは一括(batch write)で処理し、パフォーマンスを向上
・実行前に入力データの検証を行い、異常があれば処理を中断
・万が一のために、元データのバックアップや復元手順も用意する
この方法なら安心して自動化できますよ。


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


□ スプレッドシートの準備

・「データ」シートに月次集計の元データを用意してください。これが既存のデータとなります。
・月次報告書は毎回新しいスプレッドシートファイル(または新規シート)に出力しますので、元データの更新はありません。


□ GASの権限

・スプレッドシートの読み書き権限(SpreadsheetApp)
・ファイルの作成・管理権限(DriveApp)
・トリガーを使う場合はインストール型トリガーの設定が必要です(後述)


□ インストール型トリガー

・手動でトリガー設定から「毎月指定日時に実行」するよう設定してください。
・トリガーはGASエディタの「編集」→「現在のプロジェクトのトリガー」から追加可能です。


■ 安全にデータを扱うポイント

・既存の「データ」シートは一切削除・変更しません。
・集計結果は新規作成したスプレッドシートに書き込み。
・処理前にデータの存在・形式を検証し、不正な場合は処理を中断します。
・一括で範囲指定して書き込むことでAPIの呼び出し回数を削減。
・バックアップは元データのコピーを別ファイルとして保存しておく方法が有効です。


■ コスト削減の目安:仮定のシナリオ

例えば、月次報告書作成にかかる時間を手作業で3時間と仮定。時給2,000円の人件費だと6,000円/月。GAS自動化で1時間に短縮できたとすると、月4,000円のコスト削減になります。

計算式は以下の通りです。

削減額/月 = (手作業時間 - 自動化後時間) × 時給

※あくまで仮定の数値であり、導入効果を保証するものではありません。


□ 実際のコード例:月次報告書を新規ファイルに作成する

function generateMonthlyReport() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const dataSheet = ss.getSheetByName('データ');
if (!dataSheet) {
Logger.log('データシートが見つかりません');
return;
}

// データの読み込み(例:A列=日付, B列=売上, C列=経費)
const lastRow = dataSheet.getLastRow();
if (lastRow < 2) {
Logger.log('データがありません');
return;
}
const dataRange = dataSheet.getRange(2,1,lastRow-1,3);
const data = dataRange.getValues();

// 入力検証:日付型チェックと数値チェック
for (let i=0; i<data.length; i++) {
if (!(data[i][0] instanceof Date) || typeof data[i][1] !== 'number' || typeof data[i][2] !== 'number') {
Logger.log(`不正なデータが行 ${i+2} にあります。処理を中断します。`);
return;
}
}

// 月次集計(例:売上・経費の合計を算出)
let totalSales = 0;
let totalExpenses = 0;
data.forEach(row => {
totalSales += row[1];
totalExpenses += row[2];
});
const netProfit = totalSales - totalExpenses;

// 新規スプレッドシート作成(ファイル名に日時を付加)
const now = new Date();
const formattedDate = Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const reportFileName = `月次報告書_${formattedDate}`;
const newSpreadsheet = SpreadsheetApp.create(reportFileName);
const newSheet = newSpreadsheet.getSheets()[0];
newSheet.setName('報告書');

// 書き込みデータをまとめる
const outputData = [
['月次報告書', ''],
['作成日時', now],
[],
['売上合計', totalSales],
['経費合計', totalExpenses],
['純利益', netProfit]
];

// 一括書き込み
newSheet.getRange(1,1,outputData.length, outputData[0].length).setValues(outputData);

Logger.log(`月次報告書を新規ファイルに作成しました: ${reportFileName} (ID: ${newSpreadsheet.getId()})`);
}


□ ポイント解説

・既存の「データ」シートは読み取るだけで書き換えなし
・新規ファイルを作成し、そこでレポートを作成
・日付と数値のバリデーションで入力異常を検知
・書き込みはsetValuesでまとめて処理
・ログに結果を出し、実行状況を把握しやすく


□ バックアップと復元の考え方

・元データは重要なので、必要に応じて手動またはGASで定期的にコピーを作成しましょう。
・例えば、毎月処理の前に「データ」シートのコピーを別のスプレッドシートやファイルに保存しておくと安心です。
・もし誤った操作があっても、バックアップから復元可能です。


□ まとめ:GASで賢くレポート自動化しよう

今回紹介した方法なら、Googleアカウントの利用枠内で追加の専用SaaS料金なしに月次報告書を自動生成できます。Apps Scriptの実行時間やAPI呼び出し制限には注意が必要ですが、正しく使えばコスト削減にもつながるでしょう。

初期設定や権限付与、インストール型トリガーの設定もお忘れなく。データを消さず安全に処理することがポイントです。

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

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

■ 関連サービス

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