Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » VBAで選択したセル範囲に含まれる図形を削除する

VBAで選択したセル範囲に含まれる図形を削除する

対象:Excel2003, Excel2007, Excel2010, Excel2013

アクティブシート上の、グループ化された図形をグループ解除するマクロをご紹介しました。

この記事を作成する工程で、英語圏の掲示板を眺めていたら、興味深い別のExcelマクロが紹介されているのに気付きました。選択されているセル範囲の図形を削除するマクロです。

ワークシート上の複数の図形を削除するには、[Shift]キーや[Ctrl]キーを押しっぱなしにして図形を一つずつクリックしていくか、[オブジェクトの選択]コマンドからマウスポインタを変更してドラッグする必要があります。

この作業を楽にしてくれるマクロです。

この掲示板に書かれているマクロは確かに便利なのですが、図形の左上が選択されたセル範囲に含まれているときに削除が行われるという仕様です。

選択したセル範囲に含まれる図形を削除するサンプルマクロ

図形の左上が選択されているセル範囲に含まれるよりも、図形の一部でも選択されたセル範囲に含まれているときに削除できるほうが、より便利だと感じたので、そんなマクロを作ってみました。

Sub 選択されているセル範囲内の図形を削除する()
 If TypeName(Selection) <> "Range" Then Exit Sub

 Dim rng As Range
 Set rng = Range(shp.TopLeftCell, shp.BottomRightCell) 
 
 Dim shp As Shape
 For Each shp In ActiveSheet.Shapes  
  If Not (Intersect(rng, Selection) Is Nothing) Then
   shp.Delete
  End If 
 Next
End Sub

サンプルマクロの解説

セル以外が選択されているときに実行時エラーが発生しないように、セルが選択されていないときはこのマクロを終了します。

If TypeName(Selection) <> "Range" Then Exit Sub

図形の配置されている、セル範囲をオブジェクト変数・rngにセットします。

 Set rng = Range(shp.TopLeftCell, shp.BottomRightCell)

アクティブシート上の、すべての図形にループ処理を開始し、

 For Each shp In ActiveSheet.Shapes

オブジェクト変数・rngにセットした図形の配置されているセル範囲と、選択されているセル範囲が重なっているかどうかをIntersectメソッドで調べ、
  If Not (Intersect(rng, Selection) Is Nothing) Then

選択したセル範囲に含まれる図形を削除するExcelマクロ

重なっているときにその図形を削除しています。

  shp.Delete

最終更新日時:2021-12-14 13:48

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » VBAで選択したセル範囲に含まれる図形を削除する

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.