「実行時エラー 1004」を出さずに、ワークシート内のグラフを「グラフ 元」以外全て削除(Excel VBA)

【本日のミッション】

Excel VBAにて、ワークシート内の「グラフ 元」以外のグラフを全て削除せよ。

ミッションの概要

ワークシート内に、「グラフ 元」~「グラフ 19」までグラフがあって、「グラフ 元」だけ残して、他のグラフは削除する、というミッションです。

日々の業務で、グラフを削除だけ・・・という作業はあまりないと思うのですが、下記のようなグラフを何度も作り変える必要のある場合には、今回のミッションが役に立ちます。

系列が1つのグラフを大量連続作成(Excel VBA)

「グラフ 元」は、一番上のグラフです。
[ホーム]-[編集]-[検索と選択]ー[オブジェクトの選択と表示]で、アクティブシートのオブジェクトが表示されます。

下記処理は、名前が「グラフ 元」以外のグラフを削除するコードです。

プロシージャ

Sub ワークシート内のグラフ元以外のグラフを全て削除()
    '【変数】
    Dim c_ct As Long    'グラフカウント

    '■ワークシート内のグラフを順に処理
    For c_ct = ActiveSheet.ChartObjects.Count To 1 Step -1

        '■グラフ 元以外削除
        If ActiveSheet.ChartObjects(c_ct).Name <> "グラフ 元" Then
            ActiveSheet.ChartObjects(c_ct).Delete
        End If
    Next c_ct
End Sub

↓結果はコチラ。「グラフ 元」以外のグラフが全て削除されました。

アクティブシートに存在するグラフの個数の回数だけ、グラフ名が「グラフ 元」かどうかIF式で判定して、そうでなければ削除すればいいのですが、処理の順番には注意が必要です。

■■■スポンサーリンク■■■

グラフ処理順「グラフ最大個数→1個目」の理由

下記は間違った処理のコードです。

For c_ct = 1 To ActiveSheet.ChartObjects.Count
    If ActiveSheet.ChartObjects(c_ct).Name <> "グラフ 元" Then
        ActiveSheet.ChartObjects(c_ct).Delete
    End If
Next c_ct

グラフの1個目から処理をした場合の処理順は

グラフ 元→グラフ 2→グラフ 4→グラフ 6→グラフ 8→グラフ 10→グラフ 12→グラフ 14→グラフ 16→グラフ 18

→→→「実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。
が出て、処理が止まってしまいます。

処理開始時、グラフは19個存在します。

  1. グラフ 元は「グラフ 元」なので削除されません。
  2. グラフ2は「グラフ 元」でないため、削除されます。
    この時点でワークシート内のグラフが18個になってしまいます。
  3. 次はワークシート内の3つ目のグラフが処理対象になります。
    先ほどグラフ2が削除されてしまったため、グラフ4が3つ目のグラフとして認識され、処理対象になります。
    つまり、グラフ3は生き残ってしまうのです。
  4. そんな処理を繰り返して、11個目のグラフの処理をしようとしたとき、「実行時エラー 1004」が出てしまいます。
    処理対象のグラフが存在しません!というエラーです。

処理対象にならなかったグラフが存在するため、正しく処理が行われませんでした。

そのようなことにならないように、オブジェクトの削除処理をする場合は、最大数から削除するようにしましょう!

参照

系列が1つのグラフを自動大量連続作成(Excel VBA)
「実行時エラー 1004」を出さずに、ワークシート内のグラフを「グラフ 元」以外全て削除(Excel VBA)
グラフの参照先を変えると勝手にグラフの色が変わる現象を解決せよ
系列が複数あるグラフを自動大量連続作成(Excel VBA)
n行毎の改ページ設定 「実行時エラー1004 RangeクラスのPageBreakプロパティを設定できません」の原因(Excel VBA)
参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
複数系列・参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
大量の画像やグラフ等のオブジェクトで画面表示が遅いのを解決(Excel)

■■■スポンサーリンク■■■