Excel では、シート上に複数のグラフが配置されることがあります。
VBA では ChartObjects コレクションを使うことで、既存グラフを検索したり、
内容を更新したり、不要なグラフを削除できます。
目次
1. ChartObjects の基本(シート上のグラフを操作するための入り口)
通常のワークシートに配置されたグラフは、
**ChartObject(グラフの枠)**として管理され、
その中に Chart(グラフ本体) が入っています。
Sheet1.ChartObjects(index).Chart
- ChartObjects(index) → グラフ枠
- ChartObjects(index).Chart → グラフ本体
これを使って、位置・サイズ・データ範囲・書式などを操作できる仕組みです。
2. 既存のグラフを検索する方法
● 1つ目のグラフを取得する例
Sub GetFirstChart()
Dim co As ChartObject
Set co = Sheets("Sheet1").ChartObjects(1)
MsgBox "1つ目のグラフ名:" & co.Name
End Sub
● 名前でグラフを検索する(推奨)
複数のグラフがある場合は、名前で検索する方法が最も安全です。
Function GetChartObjectByName(ws As Worksheet, chartName As String) As ChartObject
Dim co As ChartObject
For Each co In ws.ChartObjects
If co.Name = chartName Then
Set GetChartObjectByName = co
Exit Function
End If
Next co
End Function
3. グラフの内容を更新する(再設定・再描画)
● データ範囲を更新する(SetSourceData)
Sub UpdateChartRange()
Dim co As ChartObject
Dim ws As Worksheet
Set ws = Sheets("Data")
Set co = Sheets("Graphs").ChartObjects("売上グラフ")
co.Chart.SetSourceData Source:=ws.Range("A1:B20")
End Sub
● グラフ種類の変更
co.Chart.ChartType = xlLineMarkers
● タイトル更新
co.Chart.ChartTitle.Text = "月次売上(更新後)"
4. グラフの削除方法
● 単体のグラフを削除する
Sub DeleteChart()
Dim co As ChartObject
Set co = Sheets("Graphs").ChartObjects("売上グラフ")
co.Delete
End Sub
● シート上の全グラフを削除する(レポート作りに便利)
Sub DeleteAllCharts()
Dim ws As Worksheet
Dim co As ChartObject
Set ws = Sheets("Graphs")
For Each co In ws.ChartObjects
co.Delete
Next co
End Sub
5. グラフが存在するかチェックしてから処理する(安全なコード)
削除・更新の前に、存在チェックを行うのが実務では重要です。
Function ChartExists(ws As Worksheet, chartName As String) As Boolean
Dim co As ChartObject
For Each co In ws.ChartObjects
If co.Name = chartName Then
ChartExists = True
Exit Function
End If
Next co
ChartExists = False
End Function
● 使用例
Sub SafeDeleteChart()
Dim ws As Worksheet
Dim chartName As String
Set ws = Sheets("Graphs")
chartName = "売上グラフ"
If ChartExists(ws, chartName) Then
ws.ChartObjects(chartName).Delete
Else
MsgBox "グラフが存在しません"
End If
End Sub
6. まとめ
ChartObjects を使うと、以下が簡単に管理できます。
- index や name による既存グラフの検索
- データ範囲・タイトル・グラフ種類の更新
- 不要なグラフの削除
- 安全な存在チェック関数の活用
コメント