質問

2016年06月08日 08時56分
  • ExcelVBAで シート内にあるオブジェクトを選択削除する

情シスのオープンナレッジ『Syszo』サービス終了のお知らせ

質問

ExcelVBAの質問ですが「シート内にあるオブジェクトを選択削除するマクロ命令」を作る方法、もしくはヒントをいただけないでしょうか
目的は 隠れたオブジェクトを探して不要なら削除する
  列・行・セルの削除を繰り返すとオブジェクトが極小になって見えないけれど存在してすごく容量を食うことがあります。その見えないオブジェクトを削除したいのです。

シートを指定してマクロを走らせると オブジェクトを一つづつ選択して[削除してよいですか はい/いいえ]を出す。どのオブジェクトを選択しているかを選択しているかをどのように表現するかがミソです。

よろしくお願いします。

4件の回答があります

回答

以下のようなサンプルコード作ってみましたけど、画面表示外にあるオブジェクトが何かわからないですね。
選択しているところに画面を移動できれば使い勝手はあがるのですが、ぱっとはできませんでした。

Sub ShapeDelete()

Application.ScreenUpdating = True

For Each objShape In ActiveSheet.Shapes

objShape.Select

ret = MsgBox(objShape.Name & " を削除しますか?", vbYesNo)

If ret = vbYes Then

objShape.Delete

End If

Next objShape

End Sub

2016年06月08日 12時55分
LSD

回答

desatoさん の目的だったら、必要なオブジェクトのみ選択して、
別シートに貼り付けて、元シートのオブジェクトを全削除、
その後オブジェクトを戻す。でもできるかと
このときA1にオブジェクトを追加しておくと位置がずれないです。

後シートが重たいのであれば、不要な条件付書式と名前がないか
確認しておくとよいと思います。

2016年06月08日 12時58分
LSD

回答

いろいろなご意見をありがとうございます  参考にさせていただきます

実例としては 組織図 なのですが 組織の四角やそれをつなぐ線がいっぱいるのです しかも行・列の削除を何度もやっているのでオブジェクトが潰れて見えなくなっています。
ジャンプ>オブジェクト で選択すると 見えてるもの、見えないものが重なりあってどれがどれだかぐちゃぐちゃです マウスで選択しているとちょっとのズレで選択を誤り、必要なものを消してしまいそうです

2016年06月09日 09時07分

回答

LSDさま

Application.ScreenUpdating = True
を  objShape.Select 
のあとに移動すると 選択中のオブジェクトがわかる(選択状態になる)のでよいかと思います
でも画面の外になると見えないですね

ありがとうございました

2016年06月11日 16時48分

あなたもコメントしましょう!