VBAで図を削除する方法(VBAで図を操る①)

2021年3月20日

VBAの図って、セル(Range)と比べると扱い方が難しいですよね。

そんな扱いづらい図ですが、操作方法は限られているのでコードを数パターン覚えておけば後は応用が利きます。(基本的にShapesコレクションからShapeオブジェクトを取り出す)

今回は図を削除する方法を紹介します。

全ての図を削除する方法

Sub AllShpDelete()
'ActiveSheet上の図を全て削除
    Dim oneShp As Variant
    For Each oneShp In ActiveSheet.Shapes
        oneShp.Delete
    Next
End Sub

まずはActiveSheet上の全ての図を削除する方法です。

Shapeコレクション(ActiveSheet.Shapes)から1つの図(oneShp)を取り出して、それを順番に削除(Delete)します。

特定の図のみ削除する方法

Sub SomeShpDelete()
'ActiveSheet上のテキストボックスを全て削除
    Dim oneShp As Variant
    For Each oneShp In ActiveSheet.Shapes
        If oneShp.Type = msoTextBox Then oneShp.Delete
    Next
End Sub

さらにTypeプロパティを組み合わせることで、特定の図のみを削除することができます。
上のプログラムではテキストボックスのみを削除します。

msoTextBoxのところを他の定数に差し替えることで、削除する図の種類を指定することができるので、自分が消したい図に応じて変更してみてください。

定数種類
msoShapeTypeMixed-2
msoAutoShape図形・オートシェイプ1
msoCallout吹き出し2
msoChartグラフ3
msoCommentコメント4
msoFreeformフリーフォーム5
msoGroupグループ化された図形6
msoEmbeddedOLEObject埋め込みOLEオブジェクト7
msoFormControlフォームコントロール8
msoLine9
msoLinkedOLEObjectリンクOLEオブジェクト10
msoLinkedPictureリンク画像11
msoOLEControlObjectActiveXコントロール12
msoPicture画像13
msoPlaceholderプレースホルダー14
msoTextEffectテキスト効果15
msoMediaメディア16
msoTextBoxテキストボックス17
msoScriptAnchorスクリプトアンカー18
msoTable19
msoCanvas描画キャンバス20
msoDiagram図表21
msoInkインク22
msoInkCommentインクコメント23
msoSmartArtスマートアート24
msoSlicerスライサー25
msoWebVideoWebビデオ26
msoContentAppコンテンツアドイン27
msoGraphicグラフィック28
msoLinkedGraphicリンクグラフィック29
mso3DModel3Dモデル30
msoLinked3DModelリンク3Dモデル31

他の「VBAで図を操る」の記事はこちらからどうぞ