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

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

対象:Excel2003, Excel2007, Excel2010, Excel2013


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

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

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

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

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

[スポンサード リンク]

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

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


Sub 選択されているセル範囲内の図形を削除する()

 Dim shp As Shape
 Dim rng As Range
 
 If TypeName(Selection) <> "Range" Then Exit Sub
 
 For Each shp In ActiveSheet.Shapes
  
  ' 図形の配置されているセル範囲をオブジェクト変数にセット
  Set rng = Range(shp.TopLeftCell, shp.BottomRightCell)
 
  ' 図形の配置されているセル範囲と
  ' 選択されているセル範囲が重なっているときに図形を削除
  If Not (Intersect(rng, Selection) Is Nothing) Then
   shp.Delete
  End If
 
 Next

End Sub

サンプルマクロの解説

セル以外が選択されているときに実行時エラーが発生しないように、セルが選択されていないときはこのマクロを終了します。
 If TypeName(Selection) <> "Range" Then Exit Sub

アクティブシート上の、すべての図形にループ処理を開始し、
 For Each shp In ActiveSheet.Shapes

図形の配置されている、セル範囲をオブジェクト変数・rngにセットします。
  Set rng = Range(shp.TopLeftCell, shp.BottomRightCell)

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

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

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

関連語句
VBA, Visual Basic for Applications

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

[スポンサード リンク]
[スポンサード リンク]

TrackBack:1

TrackBack URL
図形を一括削除するExcelマクロ from インストラクターのネタ帳
アクティブなシート上の図形を一括削除するExcel(エクセル)マクロと、アクティブブックの全シートの図形を一括削除するマクロをご紹介しています。

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

「Shapeオブジェクト」の記事一覧

検索

最近じっくりと読まれている記事

.