VBAで図形を削除する方法
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 |
msoLine | 線 | 9 |
msoLinkedOLEObject | リンクOLEオブジェクト | 10 |
msoLinkedPicture | リンク画像 | 11 |
msoOLEControlObject | ActiveXコントロール | 12 |
msoPicture | 画像 | 13 |
msoPlaceholder | プレースホルダー | 14 |
msoTextEffect | テキスト効果 | 15 |
msoMedia | メディア | 16 |
msoTextBox | テキストボックス | 17 |
msoScriptAnchor | スクリプトアンカー | 18 |
msoTable | 表 | 19 |
msoCanvas | 描画キャンバス | 20 |
msoDiagram | 図表 | 21 |
msoInk | インク | 22 |
msoInkComment | インクコメント | 23 |
msoSmartArt | スマートアート | 24 |
msoSlicer | スライサー | 25 |
msoWebVideo | Webビデオ | 26 |
msoContentApp | コンテンツアドイン | 27 |
msoGraphic | グラフィック | 28 |
msoLinkedGraphic | リンクグラフィック | 29 |
mso3DModel | 3Dモデル | 30 |
msoLinked3DModel | リンク3Dモデル | 31 |