【本日のミッション】
Excel VBAにて、ワークシート内の「グラフ 元」以外のグラフを全て削除せよ。
ミッションの概要
ワークシート内に、「グラフ 元」~「グラフ 19」までグラフがあって、「グラフ 元」だけ残して、他のグラフは削除する、というミッションです。
日々の業務で、グラフを削除だけ・・・という作業はあまりないと思うのですが、下記のようなグラフを何度も作り変える必要のある場合には、今回のミッションが役に立ちます。
「グラフ 元」は、一番上のグラフです。
[ホーム]-[編集]-[検索と選択]ー[オブジェクトの選択と表示]で、アクティブシートのオブジェクトが表示されます。
→
下記処理は、名前が「グラフ 元」以外のグラフを削除するコードです。
プロシージャ
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個存在します。
- グラフ 元は「グラフ 元」なので削除されません。
- グラフ2は「グラフ 元」でないため、削除されます。
この時点でワークシート内のグラフが18個になってしまいます。 - 次はワークシート内の3つ目のグラフが処理対象になります。
先ほどグラフ2が削除されてしまったため、グラフ4が3つ目のグラフとして認識され、処理対象になります。
つまり、グラフ3は生き残ってしまうのです。 - そんな処理を繰り返して、11個目のグラフの処理をしようとしたとき、「実行時エラー 1004」が出てしまいます。
処理対象のグラフが存在しません!というエラーです。
処理対象にならなかったグラフが存在するため、正しく処理が行われませんでした。
そのようなことにならないように、オブジェクトの削除処理をする場合は、最大数から削除するようにしましょう!
■スポンサーリンク
■ランキングに参加しています。 ↓このブログを気に入っていただけましたら、ポチッとお願いします。
Microsoft Officeランキング