GASでスプレッドシートのグラフを自動更新

GASスプレッドシート可視化
GASでスプレッドシートのグラフを自動更新のサムネイル

GASでスプレッドシートのグラフを自動更新

はじめに

こんにちは、GASおじです。中小企業の経営者やフリーランスの皆さん、スプレッドシートのグラフ更新で手間取っていませんか?手動でグラフの元データを修正していると、時間もかかるしミスも増えますよね。そこで今回は、Google Apps Script(以下GAS)を使ってスプレッドシートのグラフを自動で更新する方法を解説します。

おじさんはSaaS課金には厳しいので、追加の専用SaaS料金はかけず、Googleアカウントの利用枠内で動かせるスクリプトにこだわります。もちろん、既存データは消さずに新しい日時付きのシートを作って結果を出力するので、安全かつ安心です。

初期設定と必要な権限

まず、スクリプトを動かすには対象のスプレッドシートへの編集権限が必要です。また、スクリプトエディタから「スプレッドシートの管理」や「ドライブの管理」などの認証を求められますが、これはスクリプトが新規シートを作成したり、データを読み書きするために必要な権限です。

また、スクリプトの自動実行には「インストール型トリガー」を使います。これにより、例えば毎日決まった時刻にグラフの更新を自動化可能です。

個人情報の取扱いについても注意が必要ですが、今回のスクリプトは社内データの範囲で完結し、外部APIや外部サービスとは連携しません。

スクリプトの概要

今回のスクリプトは以下の流れで動作します。

  1. 元データが入った既存シートを読み込む
  2. 入力値の簡単な検証を行う(例えば数値チェック)
  3. 新規に日時付きのシートを作成し、そこへ検証済みデータを一括書き込み(batch write)
  4. 新しいシートに基づいてスプレッドシート上のグラフを作成、または更新(既存グラフは触らない)
  5. 何かあった場合のために、元データのバックアップも別シートに作成

この方法なら元のデータは安全に残り、トラブル発生時はバックアップから復元も可能です。

具体的なGASコード例

function updateChartWithBackup() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheetName = '元データ';
  const backupSheetName = 'バックアップ_' + Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd_HHmmss');
  const outputSheetName = '更新結果_' + Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd_HHmmss');

  // 元データシート取得
  const sourceSheet = ss.getSheetByName(sourceSheetName);
  if (!sourceSheet) {
    throw new Error('元データシートが見つかりません: ' + sourceSheetName);
  }

  // 元データを取得
  const dataRange = sourceSheet.getDataRange();
  const dataValues = dataRange.getValues();

  // 簡単な入力検証(例:数値チェック)
  for (let i = 1; i < dataValues.length; i++) {
    for (let j = 0; j < dataValues[i].length; j++) {
      const val = dataValues[i][j];
      if (j > 0 && typeof val !== 'number') { // 1列目以降は数値必須と仮定
        throw new Error(`入力エラー: ${i+1}行目、${j+1}列目は数値でなければなりません。`);
      }
    }
  }

  // バックアップ用シート作成
  const backupSheet = ss.insertSheet(backupSheetName);
  backupSheet.getRange(1, 1, dataValues.length, dataValues[0].length).setValues(dataValues);

  // 新規出力用シート作成
  const outputSheet = ss.insertSheet(outputSheetName);

  // データを加工(例:数値を2倍にする簡単な処理)
  const outputValues = dataValues.map((row, idx) => {
    if (idx === 0) return row; // ヘッダーはそのまま
    return row.map((cell, colIdx) => (colIdx > 0 ? cell * 2 : cell));
  });

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

  // グラフ作成
  const chartBuilder = outputSheet.newChart()
    .setChartType(Charts.ChartType.LINE)
    .addRange(outputSheet.getRange(1, 1, outputValues.length, outputValues[0].length))
    .setPosition(2, outputValues[0].length + 2, 0, 0)
    .setOption('title', '自動更新グラフ')
    .build();

  outputSheet.insertChart(chartBuilder);
}

このスクリプトを使うことで、元データは一切削除せずに、バックアップと新規の日時付きシートへ加工データを出力し、そこにグラフを作成できます。既存シートのグラフやデータはそのままで安全です。

トリガー設定と復元手順

  • トリガー設定
    スクリプトエディタの「時計」アイコンからインストール型トリガーを設定し、「updateChartWithBackup」を毎日や毎時間など好きなタイミングで実行するようにしましょう。

  • 復元手順
    もし新規作成したシートに問題があった場合は、バックアップシートが残っているので、そのシートから元の「元データ」シートにデータをコピーし直すか、新規シートを削除して再実行してください。

コスト削減のポイント

この方法では、

  • 追加のSaaS料金はかけず、Googleアカウントの利用枠内で動かせる
  • スクリプト実行にかかるコストは無料枠内で十分(ただしApps Scriptのクォータや実行時間上限はある)
  • 手動でグラフ更新にかけていた時間を自動化で削減可能

仮に手動で毎日10分の作業を自動化できたとすると、
時給2000円の作業者の場合、
年間作業時間削減 = 10分 × 365日 = 約61時間
コスト削減額 = 61時間 × 2000円 = 122,000円(単純計算)

あくまで仮定であり、実際の効果は運用状況によりますのでご注意ください。

まとめ

  • GASでスプレッドシートのグラフを安全に自動更新するには、既存データを直接触らず新規シートへ書き出すのがベスト
  • 入力検証やバックアップも組み込み、ミスやトラブルを最小化
  • トリガーで自動化し、手間と時間の削減を図る
  • Googleアカウントの利用枠内で追加料金なし(ただしApps Scriptのquota制限あり)

これで、あなたの業務効率アップに少しでも役立てばおじさん冥利に尽きます。気になることがあればいつでもGASおじラボへ遊びに来てくださいね。

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