【VBA】既存グラフの検索・更新・削除方法(ChartObjects(index))

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 による既存グラフの検索
  • データ範囲・タイトル・グラフ種類の更新
  • 不要なグラフの削除
  • 安全な存在チェック関数の活用

コメント

タイトルとURLをコピーしました