📊 Excel VBA Top100
⚡

UpdateAllCharts

自動化

アクティブシート内の全グラフを強制更新します

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

UpdateAllCharts デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(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