Excelでグラフを運用する際、データが増えるたびにグラフ範囲を手動で変更していては効率が悪くなります。
そこで本記事では、**「最終行を自動で判定し、グラフが常に最新データまで反映される仕組み」**をVBAで実装する方法を解説します。
目次
1. 動的に最終行を取得してグラフ範囲を更新する仕組み
グラフが自動的に最新データまで反映されるためには、
データの最終行をVBAで判定し、その行までをグラフ範囲に設定する処理
を組み込む必要があります。
以下のようなケースに対応できます:
- 毎月データが増えていく販売管理表
- 毎日行が追加される進捗管理表
- センサー値などが随時追加されるログデータ
- 「Today関数」などで日々追加される時系列データ
ポイントは、最終行を毎回自動で計算 → グラフ範囲を書き換えるという流れです。
2. 実装の流れ(概要)
- データが入力されている最終行を取得
- グラフが参照しているデータ範囲を書き換え
- グラフを再描画(必要に応じて)
3. 実際のVBAコード例
以下の例では:
- シート名:
Sheet1 - データは A列(X軸)、B列(Y軸)
- グラフオブジェクト名:
Chart 1
という前提で作成します。
Sub UpdateChartRange()
Dim ws As Worksheet
Dim lastRow As Long
Dim chartObj As ChartObject
Dim rngX As Range
Dim rngY As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
'A列の最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'X軸とY軸に使う範囲を定義
Set rngX = ws.Range("A2:A" & lastRow)
Set rngY = ws.Range("B2:B" & lastRow)
'グラフオブジェクトを取得
Set chartObj = ws.ChartObjects("Chart 1")
'グラフの元データを最新範囲に更新
With chartObj.Chart
.SeriesCollection(1).XValues = rngX
.SeriesCollection(1).Values = rngY
End With
End Sub
4. コードのポイント
● A列の最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
→ 空白のない最終データ行を正確に取得できます。
● X軸とY軸の範囲
A2:A最終行、B2:B最終行のように動的に指定。
● SeriesCollection(1)
1つ目の系列を更新。複数系列の場合は番号を変更します。
5. 運用のポイント
- データを追加した瞬間に反映したい場合
→ Worksheet_Changeイベントやボタンにこの処理を紐付ける - 複数のグラフに対応させたい場合
→ ループで全ChartObjectsを処理できる - 毎回Excel起動時にも自動反映したい場合
→ Workbook_Openに組み込むと便利
コメント