目次
概要
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 | 変数宣言 | Worksheet と ChartObject を分けて管理すると可読性が向上します。 |
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 で瞬時に更新できます。シート名、セル範囲、グラフ名を変数で柔軟に管理することで、複数グラフを一括メンテナンスする仕組みも構築可能です。定期的なレポート作成を自動化し、作業時間を大幅に短縮する第一歩としてぜひご活用ください。