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

GASスプレッドシートレポート自動化
月次報告書をスプレッドシートとGASで自動生成のサムネイル

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

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

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

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

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

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

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

この方法なら安心して自動化できますよ。

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

スプレッドシートの準備

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

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の便利なツールやテクニックを知りたい方は、ぜひGASおじラボのメンバーシップに参加してみてください。

GASおじラボで500ツール使い放題 →