Excel VBA: 既存グラフのデータ範囲を動的に更新する方法

目次

概要

Excel でレポートを作成していると、データ量が増減するたびにグラフの範囲を手作業で調整するのは煩雑です。VBA の SetSourceData メソッドを活用すれば、指定セル範囲をワンクリックで更新できます。本記事では、円滑なメンテナンスを実現するサンプルコードとそのポイントを解説いたします。


サンプルコード — データ範囲の再設定

Sub RefreshChartRange()
    Dim targetSheet As Worksheet        ' グラフが配置されているシート
    Dim chartObj   As ChartObject       ' 対象グラフオブジェクト
    Dim srcRange   As Range             ' 新しいデータ範囲

    ' 1. 操作対象シートを取得
    Set targetSheet = ThisWorkbook.Worksheets("Report")          ' シート名は任意

    ' 2. 変更するデータ範囲を設定(見出し+数値を想定)
    Set srcRange = targetSheet.Range("C2:D15")                   ' 必要に応じて変更

    ' 3. 特定グラフのデータ範囲を更新
    Set chartObj = targetSheet.ChartObjects("RevenueChart")      ' グラフ名を指定
    chartObj.Chart.SetSourceData Source:=srcRange
End Sub

コード解説

役割重要ポイント
1-4変数宣言WorksheetChartObject を分けて管理すると可読性が向上します。
7シート取得Worksheets("Report") 部分を変更すれば別シートでも流用可能です。
10セル範囲指定データ範囲が動的に拡大・縮小するケースでは、End(xlUp)CurrentRegion で自動検出も可能です。
13-14グラフ更新ChartObjects("RevenueChart") はグラフの名前プロパティで識別します。既定名のままでは見分けにくいため、作成時に名前を付けておくと便利です。

よくある質問

Q. グラフ名が分からない場合はどうすればよいですか

A. VBA から For Each ループで ChartObjects を列挙し、Name プロパティをウォッチウィンドウで確認する方法が簡単です。 

Q. データ範囲が毎回変動する場合の自動化方法はありますか

A. CurrentRegion, UsedRange, あるいは最終行を取得する Cells(Rows.Count, 列番号).End(xlUp).Row などを併用すると、追加行が発生しても自動的にグラフが拡張されます。 


まとめ

SetSourceData メソッドを使えば、既存グラフのデータ範囲を VBA で瞬時に更新できます。シート名、セル範囲、グラフ名を変数で柔軟に管理することで、複数グラフを一括メンテナンスする仕組みも構築可能です。定期的なレポート作成を自動化し、作業時間を大幅に短縮する第一歩としてぜひご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次