ADVERTISEMENT

【Googleスプレッドシート】複数のグラフを同期更新するテクニック!全体を一括で更新する設計

【Googleスプレッドシート】複数のグラフを同期更新するテクニック!全体を一括で更新する設計
🛡️ 超解決

スプレッドシートで複数のグラフを使っていると、データを更新するたびに一つずつグラフの範囲を修正するのはとても手間です。グラフの数が増えるほどミスも起こりやすくなります。この記事では、すべてのグラフを連動して一括更新できる設計方法を解説します。名前付き範囲やINDIRECT関数、Google Apps Scriptを活用することで、データソースを一元管理し、グラフを自動的に同期させることができます。

【要点】複数のグラフを同期更新する3つのテクニック

  • 名前付き範囲の活用: データ範囲に名前を付けることで、すべてのグラフが同じ名前を参照し、範囲変更が一括反映されます。
  • INDIRECT関数による動的参照: グラフのデータ範囲にINDIRECT関数を使うと、元のデータ範囲を変更するだけでグラフが自動更新されます。
  • Google Apps Scriptによる一括更新: スクリプトでデータを更新し、グラフをリフレッシュすることで、完全自動の同期システムを構築できます。

ADVERTISEMENT

なぜグラフの同期更新が重要か

複数のグラフが同じデータを参照している場合、手動で一つずつ範囲を変更すると時間がかかるだけでなく、範囲の指定ミスによるグラフの表示崩れも発生します。特に、月次レポートやダッシュボードのように定期的にデータを更新するシーンでは、同期更新の仕組みがないと毎回手作業が必要になります。データソースを一元管理し、グラフを一括で更新できるように設計すれば、作業効率が大幅に向上します。

準備:データ構造とグラフの前提条件

同期更新を行うには、あらかじめデータを整理しておくことが重要です。データは一つのシートにまとめ、各行や各列に一貫したラベルを付けます。グラフは同じデータ範囲を参照するように設定し、後で範囲を変更しやすい構造にします。ここでは、月ごとの売上データを例に説明します。

名前付き範囲を使ってグラフを同期する手順

  1. データ範囲に名前を付ける
    グラフの元になるデータ範囲を選択し、メニュー「データ」→「名前付き範囲」を開きます。範囲にわかりやすい名前(例:”売上データ”)を入力して保存します。
  2. グラフのデータ範囲を名前付き範囲に変更する
    グラフをクリックし、グラフエディタの「設定」タブで「データ範囲」の欄をクリックします。既存の範囲を削除し、代わりに「=売上データ」と入力します。これでグラフが名前付き範囲を参照するようになります。
  3. 他のグラフも同様に設定する
    同じデータを使うすべてのグラフに対して、手順2と同じ操作を行います。これで、名前付き範囲の内容を変更すると、すべてのグラフが自動的に更新されます。

ADVERTISEMENT

INDIRECT関数で動的参照を実現する手順

  1. データ範囲の開始行と終了行をセルに持たせる
    任意のセルに開始行番号(例:A1=2)、終了行番号(例:B1=10)を入力します。この値を変えることで範囲が動的に変わります。
  2. INDIRECT関数で範囲文字列を生成する
    グラフのデータ範囲として、例えば「=INDIRECT(\”Sheet1!A\”&A1&\”:C\”&B1)」と入力します。これで、A1セルとB1セルの値に応じて範囲が変わります。
  3. グラフに動的範囲を設定する
    グラフエディタの「データ範囲」に、上記のINDIRECT関数を入力します。グラフが意図通り表示されることを確認します。開始行・終了行のセル値を変更すると、グラフが自動的に更新されます。

Google Apps Scriptで一括更新する手順

  1. スクリプトエディタを開く
    メニュー「拡張機能」→「Apps Script」を開き、新しいプロジェクトを作成します。
  2. データ更新とグラフリフレッシュのコードを書く
    以下のような関数を作成します。データを更新した後、グラフを更新するためにChartクラスのupdate()メソッドを使用します。ただし、Google Apps Scriptではグラフの自動リフレッシュは直接サポートされていないため、データ範囲を若干変更して元に戻すなどの工夫が必要です。
  3. トリガーを設定する
    定期的に実行する場合は、スクリプトエディタの時計アイコンから時間主導型トリガーを設定します。毎日や毎週など、更新頻度に合わせて設定します。

注意点とよくある失敗

名前付き範囲を変更しても反映されない

原因は、グラフのデータ範囲が名前付き範囲ではなく、直接セル範囲を指定したままになっていることです。すべてのグラフが「=名前」の形式で参照しているか確認してください。また、名前付き範囲を編集した後、グラフが即座に更新されない場合は、グラフをクリックして再描画を促すと表示が更新されます。

INDIRECT関数が#REF!エラーになる

INDIRECT関数は文字列から範囲を作成するため、シート名やセル参照のスペルミスがあるとエラーになります。特に、シート名にスペースが含まれる場合は単一引用符で囲む必要があります。また、INDIRECT関数はパフォーマンスに影響を与える可能性があるため、大量のデータには注意が必要です。

スクリプトでグラフが更新されない

Google Apps Scriptからグラフを直接更新するAPIは限られています。データ範囲を変更した後にSpreadsheetApp.flush()を呼び出すことで再計算を強制できますが、グラフの表示が更新されない場合は、一度データ範囲を空にしてから再度設定する回避策を取ります。

各手法の比較

手法 難易度 自動更新の度合い 推奨シーン
名前付き範囲 範囲変更時に手動トリガー 小規模なグラフ、定期的な手動更新
INDIRECT関数 開始・終了行のセル変更で自動 範囲が可変するグラフ、動的ダッシュボード
Google Apps Script 完全自動(トリガー設定) 大規模なレポート、定期的な自動更新

まとめ

複数のグラフを同期更新するには、名前付き範囲、INDIRECT関数、Google Apps Scriptの3つの方法があります。データの更新頻度や規模に応じて最適な手法を選びましょう。名前付き範囲は簡単に導入でき、INDIRECT関数は範囲を動的にできます。スクリプトを使えば完全自動化も可能です。これらのテクニックを組み合わせれば、グラフ管理の手間を大幅に削減できます。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。