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 |

https://yaromai.jp/insert-shape/