⚡
UpdateAllCharts
自動化アクティブシート内の全グラフを強制更新します
ブック内のすべてのグラフのデータ範囲を更新し、最新のデータを反映させるマクロです。データが更新されても自動的にグラフに反映されない場合や、複数のグラフを一括で最新状態にしたい場合に使用します。各グラフを一つひとつ手動で更新する手間を省き、ブック内の全グラフを一括更新できます。ダッシュボードや定期報告書でグラフを定期更新する業務の自動化に最適です。内部ではChartObjectsコレクションをループし、各グラフのSetSourceDataメソッドを再実行してデータ範囲を最新化しています。CreateChartで作成したグラフの運用フェーズを担う処理にあたり、データ更新の都度このマクロを実行する運用にしておけば、グラフの更新忘れによる報告資料の情報齟齬を防げます。グラフが多いブックほど手動更新の手間が大きくなるため、自動化の効果も比例して大きくなります。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: UpdateAllCharts を実行すると、シート内の全グラフが再描画されます
🎯 活用シーン
- ✓毎月データを更新した後、ダッシュボード内の全グラフを一括更新して、最新データが反映された報告書を素早く完成させたいとき
- ✓複数のグラフが含まれる年次報告書で、全グラフを最新データに一括更新してプレゼン資料を完成させたいとき
- ✓データ更新後にグラフが自動的に反映されない問題を解消するために、更新ボタンで全グラフを強制更新する仕組みを設けたいとき
- ✓週次売上データを更新した直後に、ダッシュボード内のすべてのグラフを一括で最新状態にしたいとき
- ✓四半期報告書の複数グラフを、決算データ確定後にまとめて正確な数値へ更新したいとき
💡 実装のヒント
- ▸グラフがテーブルや動的な名前付き範囲を参照している場合は、データの追加・削除に伴って自動的に範囲が更新されます。このマクロは静的なデータ範囲を使っているグラフの更新に適しています。
- ▸グラフのデータ範囲自体を変更したい場合は、グラフオブジェクトのSetSourceDataメソッドを使用してください。
- ▸グラフのタイトルや軸ラベルも一緒に更新したい場合は、Chart.HasTitleプロパティでタイトルを変更する処理を追加してください。
- ▸グラフの種類やレイアウトは変更せず、データ範囲だけを更新したい場合はSetSourceDataのみを呼び出す設計にとどめてください。
- ▸複数シートにまたがるグラフを更新したい場合は、RunMacroOnAllSheetsと組み合わせてブック全体に展開できます。
💻 VBAコード
' UpdateAllCharts
' -----------------
' Macro Name: UpdateAllCharts
' Description: アクティブシート内の全グラフを強制更新します
' Parameters: なし
' Returns: なし
' Usage: UpdateAllCharts を実行すると、シート内の全グラフが再描画されます
' -----------------
Sub UpdateAllCharts()
On Error GoTo ErrorHandler
Dim ws As Worksheet
Dim chartObj As ChartObject
Set ws = ActiveSheet
If ws.ChartObjects.Count = 0 Then
MsgBox "グラフが見つかりません", vbInformation, "情報"
Exit Sub
End If
For Each chartObj In ws.ChartObjects
chartObj.Chart.Refresh
Next chartObj
MsgBox ws.ChartObjects.Count & " 個のグラフを更新しました", vbInformation, "完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub