Excelでデータが増減するたびに手動でグラフを更新するのは手間がかかってしまいます。この記事では、Excel VBAを使って動的にグラフを作成する手順を解説します。
動的にグラフを作成するVBAコード
以下は、シート内のデータに基づいて動的なグラフを作成する基本的なコードです。
VBAコード例
Sub CreateDynamicChart()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim dataRange As Range
Dim chartRange As String
' シートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' データ範囲を動的に取得
With ws
Dim lastRow As Long
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set dataRange = .Range("A1:B" & lastRow)
End With
' データ範囲を指定
chartRange = dataRange.Address
' グラフオブジェクトを作成
Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)
' グラフのソースデータを設定
With chartObj.Chart
.SetSourceData Source:=ws.Range(chartRange)
.ChartType = xlLine ' グラフタイプを線グラフに設定
End With
MsgBox "グラフを作成しました!"
End Sub
コードの解説
- データ範囲の取得
- 列Aと列Bを基準に、最終行までの範囲を取得しています。
- グラフオブジェクトの作成
ChartObjects.Add
を使い、指定した位置とサイズでグラフを作成します。
- グラフの種類の設定
.ChartType = xlLine
で線グラフを設定しています。他のグラフタイプにも変更可能です。
実行結果のイメージ
以下は、このコードを実行した後の動的グラフの例です。

上記のように、データ範囲に応じて自動的にグラフが生成されます。
動的グラフの応用例
複数のデータ列を使用する場合
以下のコードでは、データが複数列にまたがる場合の例を示します。
Sub CreateMultiSeriesChart()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim dataRange As Range
Dim lastRow As Long
' シートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 最終行を取得してデータ範囲を設定
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set dataRange = ws.Range("A1:D" & lastRow) ' 列AからDまで使用
' グラフを作成
Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=500, Top:=100, Height:=300)
With chartObj.Chart
.SetSourceData Source:=dataRange
.ChartType = xlColumnClustered ' クラスタ化された縦棒グラフ
End With
MsgBox "複数系列のグラフを作成しました!"
End Sub
実行後のイメージ

注意点
- データ形式の確認
- グラフの元データに空白や非数値データが含まれると、エラーが発生する可能性があります。
- グラフの位置とサイズ
ChartObjects.Add
のパラメータで位置とサイズを指定できます。
- グラフタイプの選択
xlLine
やxlColumnClustered
など、用途に応じて適切なグラフタイプを選択してください。
まとめ
Excel VBAを使えば、データの増減に応じて動的にグラフを作成できます。この仕組みを活用することで、日々のデータ分析やレポート作成を効率化することが可能です。ぜひこの記事を参考に、グラフの自動生成にチャレンジしてみてください!
コメント