非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Excel/VBAで図形(オートシェイプ)をすべて削除する方法

   

Excel/VBAで描いたシート上の図形(オートシェイプ)を一発で消す方法です。

[ad#top-1]

図形(オートシェイプ)を一発で消す基本形

以下のコードでシート上にあるすべての図形を消してくれます。

Sub deleteShape()
  For Each sp In ActiveSheet.Shapes
    sp.Delete
  Next sp
End Sub
 

 

それでは実行してみましょう。以下のように図形を適当に描画し、マクロを実行するためのボタンを設置しました。この状態でボタンを押す(上記マクロを実行する)とどうなるでしょうか?

 

ありゃ??ボタンまで消えてしまいました。

 

そうなのです。Shapeオブジェクトはフォームボタンも含まれているのです。

 

フォームボタンを消さずに図形(オートシェイプ)だけ消す方法

フォームボタンは消したくないので、オートシェイプのみ選択的に消去する方法がこちらです。

Sub deleteShape()
  For Each sp In ActiveSheet.Shapes
    If sp.Type = msoAutoShape Then
      sp.Delete
    End If
  Next sp
End Sub

 

ShapeオブジェクトにTypeというプロパティがあって、それを使ってオートシェイプかどうかを判別してくれるんですね。msoAutoShapeがその値となります。

もし、フォームボタンを判別したい場合は、msoFormControlにすればOKです。

 

[ad#ad-1]

スポンサーリンク

 - Excel, VBA