「実行時エラー 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)
エクセル シートに画像が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセルシート上 全てのオブジェクト(画像・図形・グラフ等)を選択し、削除する(Excel VBA)
エクセルシート上のオブジェクト(図形・画像・グラフ等)の件数を数える方法(Excel VBA)
エクセル シートにグラフが存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル シートに図形が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル 選択しているセル範囲に写真が存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲にグラフが存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲に図形が存在しているか(有無)を確認(Excel VBA)
エクセル 選択セル範囲の写真を削除する(Excel VBA)
エクセル 選択セル範囲のグラフを削除する(Excel VBA)
エクセル 選択セル範囲の図形を削除する(Excel VBA)
Excel VBAでワードを起動して文字を入力操作(Excel VBA)
Excel VBAでワードを起動してエクセルの表をワードに貼付け(Excel VBA)
Excel VBAでワードを起動して エクセルのエクセルの表を図としてワードに貼付け(Excel VBA)
Word コピー貼付けした図が白い枠だけ?図が表示されない現象を解決
Excel VBAでワードを起動して グラフをワードに図として貼付け(Excel VBA)

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