図形(オートシェイプ)の削除

シェイプ

はじめに

 オートシェイプを削除したい場合、Shapesコレクションで削除したいオートシェイプを選択して Delete メソッドを実行します。
 オートシェイプの特定は、Select で選択するか、Shapes(番号)Shapes(シェイプ名) で行います。
最初にオートシェイプの数と名前を取得する方法を紹介します。

オートシェイプの数と名前

 オートシェイプの数は、Shapes コレクションの Countプロパティで取得できます。オートシェイプの名前については、Shapes(i).Name などとして取得できます。

Sub myAllShapes()
    Dim i As Long
    For i = 1 To ActiveSheet.Shapes.Count
        Debug.Print ActiveSheet.Shapes(i).Name
    Next i
End Sub

 尚、上記プログラム以外でも、シート上のオートシェイプを選択すると、右上の名前ボックスに、オートシェイプの名前が日本語名で表示されます。
 この名前を使ってもオートシェイプの削除が出来ます。

オートシェイプの削除(単体)

 単体のオートシェイプを削除する例を見ていきます。
 Shapesはシート指定をしないとコンパイルエラーとなりますので注意してください。

選択されたオートシェイプの削除

 選択されたオートシェイプを削除するには ShapeRange を使います。ShapeRange には選択されたオートシェイプが入っています。尚、選択されたオートシェイプが無い場合はエラーとなります。

Sub ShapeDelete1()
    Selection.ShapeRange.Delete
End Sub

 もし複数のオートシェイプが選択されていて、1番目に選択されたオートシェイプを削除したい場合は以下のようにします。

Sub ShapeDelete1a()
    Selection.ShapeRange(1).Delete
End Sub

Shapesの番号指定で削除

 Shapesコレクションの要素を数値で指定して削除するには、以下のようにします。一旦オートシェイプを削除するとコレクション内の順番が変化しますので注意してください。

Sub ShapeDelete2()
    ActiveSheet.Shapes(1).Delete
End Sub

オートシェイプの名前で削除

 オートシェイプの名前で削除したい場合は、以下のようにします。

Sub ShapeDelete3()
    ActiveSheet.Shapes("四角形: 角を丸くする 4").Delete
End Sub

 先の myAllShapes() で取得したオートシェイプ名と、シートの名前ボックスで表示される名前は異なりますが、どちらを使用しても問題ありません。

全てのオートシェイプを削除

 シート上の全てのオートシェイプを削除する方法はいくつかあります。

For文を使って削除

 For文を使って全てのオートシェイプを削除する場合は、逆順で削除する点に注意してください。
逆順にしないと削除されるさいオートシェイプの順番がズレるので上手くいきません。

Sub AllShapesDelete1()
    For i = ActiveSheet.Shapes.Count To 1 Step -1
        ActiveSheet.Shapes(i).Delete
    Next
End Sub

For Each In を使って削除

 For Each In を使う場合は以下のように書く事ができます。

Sub AllShapesDelete2()
    Dim shp
    For Each shp In ActiveSheet.Shapes
        shp.Delete
    Next
End Sub

全て選択してから削除

 全てのオートシェイプを選択してから、ShapeRangeDleleteメソッドを実行すれば、一度に削除する事ができます。

Sub AllShapesDelete3()
    ActiveSheet.Shapes.SelectAll
    Selection.ShapeRange.Delete
End Sub

タイトルとURLをコピーしました