シェイプを削除

シート上の図形を消したい!ってとき、どういうコードにしますか?

  ActiveSheet.DrawingObjects.Delete

が手っ取り早いけど、なんか事情(あるセル範囲内のものだけ消すとか)があってループさせたいって場合、以下のいずれかのようにするんじゃないかと思います。

Sub Macro1()
  Dim i As Shape

  For Each i In ActiveSheet.Shapes
    i.Delete
  Next i
End Sub

 

Sub Macro2()
  Dim i As Object

  For Each i In ActiveSheet.DrawingObjects
    i.Delete
  Next i
End Sub

 
まぁ、普通は Shapes の方で書くでしょう。
なにしろ、DrawingObjects は隠しオブジェクトになっているので、デフォルトの状態では入力候補に出てきませんから。
 
しかし、コメントやオートフィルタが存在するシートの場合は、Macro1 は危険です。
コメントやオートフィルタまで消し去ってしまう上に、コメントの場合は後述するおまけまで付いてきます。
入力規則のリストの場合もそのセルを選択しているとドロップダウンが消えます。
 
コメントが Macro1 で消された場合、そのコメントがあったセルにマウスカーソルを持っていくと、、、
Excel が落ちるというおまけがもれなく付いてきます。
このおまけがなくなるのは、Excel2007 からです。
 
こういうことがあるよってことを知っていればいいんですけどね。
問題を起こさないための回避策はちゃんとあるので。
 
※.Excel World の 2007年2月20日 01:27 の日記をコピーしています。
http://excel.sns.fc2.com/excel/