グラフを一発で全て削除するマクロの作り方 − GoGoマクロ!

HOME > レッスン > グラフ削除

グラフを一発で全て削除するマクロの作り方



pickup
応用力を身に付ける!(このページの便利な活用法)



今回は、シート上にあるグラフを一発で全て削除する為の簡単マクロを作っていきます。 以下はそのごく簡単に作れる グラフ一発削除マクロの詳しい作成手順 になります。作成時間は10分程度です。


1)
それではまず、「マクロの記録」でちょっとしたマクロを記録します。
────────────────────────────+
1.まずは、エクセルを起動して、消すためのグラフを3個何か
 適当に作っておいてください。(ほんと、適当でいいです。)

2.では、マクロの記録を開始します。
 [開発]タブの[コード]で [マクロの記録] をクリック →
「マクロの記録」画面が出るので、そのまま[OK]をクリック。

3.ここで、前回作成したグラフを(どれか一つ)選択して、
 [Delete]キーを押してそのグラフを削除します。

4.[開発]タブの[コード]で [■記録終了] をクリックして、
 マクロの記録を終了させます。
────────────────────────────+



2)
いま作ったプログラムの中身を見てみます。
────────────────────────────+
1.再びプログラムの画面を表示させます。
 [開発]タブの[コード]で [Visual Basic]をクリック。

2.この画面の左上半分の[−標準モジュール]という所の下の
 [Module2]の方をダブルクリックします。
────────────────────────────+


++++++++++++++++++++++++++++─
Sub Macro1()
'
  ActiveSheet.ChartObjects("グラフ 1").Activate
  ActiveChart.Parent.Delete
End Sub
++++++++++++++++++++++++++++─



3)
では、このプログラムに少々手を加えます。
────────────────────────────+
1.この最初の行の

  ActiveSheet.ChartObjects("グラフ 1").Activate

 を、下記に修正してください。

  ActiveSheet.ChartObjects(1).Activate

 (カッコの中を数字の1に直すだけです。)
────────────────────────────+


修正した後のプログラムは下記の様になります。


+++++++++++++++++++++++++++─
Sub Macro1()
'
  ActiveSheet.ChartObjects(1).Activate
  ActiveChart.Parent.Delete
End Sub
+++++++++++++++++++++++++++─



4)
それでは、実行してみましょう。
────────────────────────────+
1.エクセルの画面に戻って、

2.では、Macro1を実行します。
 [開発]タブの[コード]で [マクロ] をクリック → 「マクロ」
 画面が出るので、そのまま [実行]をクリック。

3.それでは、続けてもう一度実行します。
 [開発]タブの[コード]で [マクロ] をクリック → 「マクロ」
 画面が出るので、そのまま [実行]をクリック。
────────────────────────────+


いかがでしょうか?

今、2回続けて実行しましたので、残り2つあったグラフが削除されれば OKです。

これは、先ほどの修正でカッコ内のグラフの名称の部分("グラフ 1")を例の ごとく背番号の1に置き換えましたので、これは、今現在(マクロを実行した 時点で)シート上にあるグラフの中で、最初に(1番目に)作られたグラフを 選んで削除する・・・ということをこの2行のプログラムは意味しています。

ということで、後はこれにいつものようにループをかぶせて 一辺に複数のグラフが削除できるよう これを繰り返しの処理のプログラムに修正していきます。



5)
それでは、このプログラムに再びちょっと手を加えていきます。
────────────────────────────+
1.まず、いつものループ処理の基本形

  For i = 1 To 10
     ・
     ・
  Next i

 を使って、この2行

  ActiveSheet.ChartObjects(1).Activate
  ActiveChart.Parent.Delete

 をループで挟んで、下記に修正します。

  For i = 1 To 10
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.Parent.Delete
  Next i

 (ループの中身の部分はいつものようにTABキーを押して
  見やすく字下げを行ってください。)


2.次に、今回はそのループのFor文の行

  For i = 1 To 10

 を、下記に修正します。

  For i = m To 1 Step -1


3.次に、いま修正したFor文の行の上に 以下の1行を
 追加します。

  m = ActiveSheet.ChartObjects.Count


4.最後に、いまのループ処理の中の固定の部分を、
 可変に変えますので、

    ActiveSheet.ChartObjects(1).Activate

 を、

    ActiveSheet.ChartObjects(i).Activate

 に、修正してください。
(カッコの中の数字の1をアルファベットのiに直すだけです。)
────────────────────────────+


修正した後のプログラムは下記の様になります。


+++++++++++++++++++++++++++─
Sub Macro1()
'
  m = ActiveSheet.ChartObjects.Count
  For i = m To 1 Step -1
    ActiveSheet.ChartObjects(i).Activate
    ActiveChart.Parent.Delete
  Next i
End Sub
+++++++++++++++++++++++++++─


解説します。

今回の修正のポイントは、削除する場合にはループは 必ず逆から回す そこがポイントになります。

これは、以前にも「行」や「列」や「シート」の削除時にも何度か勉強しましたが、 削除する場合には上からやると削除した分ずれてしまう

例えば、1行目を削除すれば2行目が1行目になる・・・

ので、下から処理していくというのが効率よいわけですが、その場合には下記のように ループのFor文の数字を逆にした上で

 For i = 1 To 10 → For i = 10 To 1

その後に

 Step -1

というのを付ければ、逆から(下から)処理することができます。


あとは、今回はグラフを削除するためのループ処理になりますから、

  m = ActiveSheet.ChartObjects.Count

で、現在シート上にあるグラフの数を、変数のmに入れて

  For i = m To 1 Step -1

として、m番目のグラフから削除していくという繰り返しの処理にします。



6)
それでは、再び実行してみましょう。
────────────────────────────+
1.エクセルの画面に戻って、

2.まずは、削除するためのグラフを作っておきますので、
 今一度、消すためのグラフを3個を 何か適当に作って
 ください。

3.それでは、Macro1を実行します。

 [開発]タブの[コード]で [マクロ] をクリック → 「マクロ」
 画面が出るので、そのまま [実行]をクリック。

────────────────────────────+


いかがでしょうか?

表示されていたグラフが全部削除されればOKということになります。



★ポイント解説

ということで、
今回のポイントはグラフの場合も(行や列やシートの削除と同様に)
※消すたびに番号はずれていくので、For文の Step -1を使って必ず後ろから 回すこと です。

あと、それと前々回に詳しく解説しましたが、この場合にも 名称を使わずに「背番号」を使う ということがポイントになります。


今回はこれで終了です。


NEXT >>
応用力を身に付ける!(このページの便利な活用法)