日付トリガーでスプレッドシート処理を自動化

GASスプレッドシートトリガー
日付トリガーでスプレッドシート処理を自動化のサムネイル

日付トリガーでスプレッドシート処理を自動化


はじめに

お疲れさまです、GASおじです。中小企業の経営者さんやフリーランスの皆さん、日々のスプレッドシート作業に時間を取られていませんか?「毎月の売上データ集計」「定期的なレポート作成」など、手動でやってると地味に時間も手間もかかりますよね。

今回はGoogle Apps Script(GAS)の日付トリガーを使って、スプレッドシートの処理を自動化する方法をお伝えします。もちろん、既存データをその場で消したり上書きしたりはせず、安全にバックアップを取りながら新しいシートやファイルに処理結果を書き出す方法です。

GASはGoogleアカウントの利用枠内で使えますが、quotaや実行時間上限はあります。専用SaaSの追加料金は不要なので、コスト面でも安心してください。


日付トリガーの仕組みと初期設定

GASの日付トリガーは、毎日、毎週、毎月の指定した日時にスクリプトを自動実行してくれる便利な機能です。これで「毎月1日に○○処理を自動化」なんてことが可能です。

初期設定の流れ

  1. スクリプトエディタを開く
    対象のスプレッドシートからメニューの「拡張機能」→「Apps Script」でエディタを開きます。

  2. スクリプトを書く
    今回のようにバックアップや検証を組み込んだスクリプトを書きます。

  3. トリガーを設定する
    エディタの左側「トリガー」から「トリガーを追加」をクリック。

    • 実行する関数名を選択
    • トリガーの種類は「時間主導型」
    • 「日付ベースのタイマー」から毎日・毎週・毎月を選択
    • 時間帯を指定して保存
  4. 必要権限の承認
    最初の実行時に権限承認を求められます。スプレッドシートの読み書き、ファイルの作成などの権限が必要です。

  5. 個人情報の取扱い
    スクリプトで扱うデータに個人情報が含まれる場合は、社内ルールや法令に従い適切に管理してください。


具体例:売上データを日時付き新シートに自動コピー&集計

例えば、毎月1日に「今月の売上データ」を現在のシートから新しい日時付きシートへコピーし、簡単な集計を加えるスクリプトを書いてみましょう。

ポイントは:

  • 既存の売上シートはそのまま残す
  • コピー先は「売上_YYYYMMDD_HHmmss」形式の新シート
  • コピー前にデータの入力検証(空行を無視)
  • まとめた集計結果をシート内に記載
  • 万が一エラー発生時に備えて、スクリプト内で例外処理も入れる
function monthlySalesBackupAndSummary() {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sourceSheet = ss.getSheetByName("売上データ");
    if (!sourceSheet) {
      throw new Error("売上データシートが見つかりません");
    }

    const dataRange = sourceSheet.getDataRange();
    const dataValues = dataRange.getValues();

    // データの入力検証:ヘッダー行は残しつつ、空行は除外
    const filteredData = dataValues.filter((row, index) => {
      if (index === 0) return true; // ヘッダーは残す
      return row.some(cell => cell !== "" && cell !== null);
    });

    if (filteredData.length <= 1) {
      throw new Error("売上データが空か不十分です");
    }

    // 新しいシート名を日時付きで作成
    const now = new Date();
    const sheetName = Utilities.formatDate(now, ss.getSpreadsheetTimeZone(), "yyyyMMdd_HHmmss");
    const newSheetName = `売上_${sheetName}`;

    // 新しいシートを作成しデータを一括書き込み
    const newSheet = ss.insertSheet(newSheetName);
    newSheet.getRange(1, 1, filteredData.length, filteredData[0].length).setValues(filteredData);

    // 簡単な集計:売上金額があると仮定し、列番号を指定(例:4列目)
    const salesColumnIndex = 3; // 0ベースで4列目
    const salesData = filteredData.slice(1).map(row => Number(row[salesColumnIndex]) || 0);
    const totalSales = salesData.reduce((sum, val) => sum + val, 0);

    // 集計結果を新シートの下に書き込む
    const summaryRow = filteredData.length + 2;
    newSheet.getRange(summaryRow, 1).setValue("合計売上");
    newSheet.getRange(summaryRow, 2).setValue(totalSales);

    Logger.log(`売上データを新シート「${newSheetName}」にバックアップ&集計しました。`);

  } catch (e) {
    Logger.log("エラー発生:" + e.message);
  }
}

バックアップと復元の手順

今回のスクリプトは既存データを削除せず新しいシートに書き出すため、元データは安全に残ります。もし何らかの問題があれば、新しく作成された日時付きシートを手動で削除すればOKです。

復元方法の例

  1. 新シートのデータを確認
  2. 必要に応じて元の「売上データ」シートに手動でコピー戻し

もし自動復元スクリプトがほしい場合も対応できますが、まずは手動確認を推奨します。GASの実行時間制限などもあるので、安易な上書きは避けましょう。


コスト削減の仮定と計算式

仮に毎月の売上データ集計に30分かかっていた作業が、この自動化で5分に短縮できたとします。時間単価を2,000円/hとすると、

  • 削減時間:30分 − 5分 = 25分 = 0.4167時間
  • 月間削減コスト:0.4167 × 2,000 = 約833円/月
  • 年間削減コスト:833 × 12 = 約10,000円

GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えますが、quotaや実行時間の上限はあるので大量データや頻繁な処理は注意してください。


まとめ

  • 日付トリガーでスプレッドシートの定期処理を自動化できる
  • 既存データはその場で消さず、新しい日時付きシートに書き出す安全設計
  • 入力検証やエラーハンドリングも組み込んで信頼性アップ
  • Googleアカウントの利用枠内で追加料金なし(quota・実行上限は注意)
  • 初期設定はスクリプト作成→トリガー追加→権限承認の流れ
  • バックアップを残すことで復元も安心

このやり方で毎月の手作業を減らし、時間をもっと本業に使いましょう。GASはちょっとした工夫で大きな効率化が狙えますよ。


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