dポイントプレゼントキャンペーン実施中!

エクセルファイルが重く所々に透明なオブジェクトが多数あり
指定範囲の図形オブジェクトの消去のマクロを教えて下さい

質問者からの補足コメント

  • For Each oShape In ActiveSheet.Shapes
    oShape.Delete
    Next
    ↑どのようにすればよいのでしょうか

      補足日時:2017/07/02 10:52

A 回答 (9件)

こんにちは。



>他のエクセルでテスト用に色を付けないで実行しましたが何も変化なしでした。
図形を描くプログラムを実行したけれども、何も変化が起こらなかったということですね。
もう少し詳しい状況が分かればとは思いますが、私の思っている状態とは違うようです。簡単に分かる方法は、(ActiveSheet.)Shapes.Count と見えているものとの数を比較してみればよいです。

それから、コードを見直しましたが、線が消えないのは、私のミスでした。お手数掛けました。基本的には1行直しただけですが、これで様子を見てください。もちろん、グラフやボタンは消えないようになっています。

'//
Sub DeleteSomeAutoShapesR()
Dim Rng As Range
Dim shp As Variant
If TypeName(Selection) <> "Range" Then Exit Sub
Set Rng = Selection
If Rng.Count <= 1 Then MsgBox "範囲を指定してください。", vbExclamation: Exit Sub
For Each shp In ActiveSheet.Shapes
 With shp
 If .ShapeStyle > 0 Then
  If Not Intersect(Rng, Range(.TopLeftCell, .BottomRightCell)) Is Nothing Then
    .Delete
  End If
 End If
 End With
Next
End Sub
    • good
    • 0

#7の回答者です。


>ただ矢印が消えませんでした。
それは、ラインの矢印ですか?それとも、オートシェイプの矢印ですか?

>見えないオートシェイプを見えるようにするですが
>実行しても見えませんでした。
それは、確かでしょうか。一つ質問ですが、どうやって見えないと分かりますか?

それには、別の懸念事項があって、いわゆる「幽霊オブジェクト」と称するものが存在します。個人的には、話がややこしくなるので触れないようにしていました。Google検索してもよいと思いますが、少し厄介な問題があったような気がします。

また、この件はフィードバックします。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
ラインの矢印の方です。

どうやって見えないと分かりますかですが、他のエクセルでテスト用に色を付けないで実行しましたが何も変化なしでした。
やりかたがいけないのでしょうか。

お礼日時:2017/07/06 14:36

>エクセルファイルが重く所々に透明なオブジェクトが多数あり


>指定範囲の図形オブジェクトの消去

>For Each oShape In ActiveSheet.Shapes
>oShape.Delete
>Next

これは、ボタンもグラフも、シート上のほとんどのオブジェクトは、全部消すという意味のマクロです。

質問要件からすれば、透明なオブジェクトは、まず、それをすべて見えるようにしなくてはならないはずです。

その上、範囲指定セル内にあるオートシェイプだけを消すマクロというのは、以下のようなものです。

''標準モジュールに貼り付けてください。
'//見えないオートシェイプを見えるようにする
Sub Visualization_AutoShapes()
Dim shp As Object
For Each shp In ActiveSheet.Shapes
  If shp.Visible = False Then
   shp.Visible = True
  End If
Next
End Sub

'//範囲指定のオートシェイプの削除
Sub DeleteSomeAutoShapes()
Dim Rng As Range
Dim flg
Dim shp As Variant
If TypeName(Selection) <> "Range" Then Exit Sub
Set Rng = Selection
If Rng.Count <= 1 Then MsgBox "範囲を指定してください。", vbExclamation: Exit Sub
For Each shp In ActiveSheet.Shapes
 With shp
 If shp.AutoShapeType > 0 Or TypeName(shp) = "GroupObject" Then
  If Not Intersect(Rng, Range(.TopLeftCell, .BottomRightCell)) Is Nothing Then
    shp.Delete
  End If
 End If
 End With
Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
ただ矢印が消えませんでした。
また、見えないオートシェイプを見えるようにするですが
実行しても見えませんでした。
私のやり方がだめだったかも?しれませんが

お礼日時:2017/07/05 21:38

こんにちは!



>指定範囲の図形オブジェクトの消去・・・

とありますので、範囲指定セル内にあるオートシェイプだけを消去する方法にしてみました。

Sub Sample1()
Dim mySp As Shape, myArea As Range
Set myArea = Selection
For Each mySp In ActiveSheet.Shapes
With mySp
If .Top >= myArea.Top And .Top + .Height <= myArea.Top + myArea.Height Then
If .Left >= myArea.Left And .Left + .Width <= myArea.Left + myArea.Width Then
mySp.Delete
End If
End If
End With
Next mySp
End Sub

※ オートシェイプが範囲指定内にかかっていても、
完全に範囲指定内にない場合は削除されません。m(_ _)m
    • good
    • 0

以下のVBAを実行すれば、アクティブシートのシェイプが削除されます。




Sub 図形削除()

For Each oShape In ActiveSheet.Shapes
oShape.Delete
Next

End Sub
    • good
    • 0

1.Ctrl+G をパシーッ


2.[セル選択]をツン
3.Alt+SB
4.[OK]をツン
5.Deleteキーを「エイヤッ!」と叩き付け
では如何かと。

貴方にマクロの素養がおありなら、上をマクロ化すればぁ~
    • good
    • 0

参考の図を貼るのを忘れていましたので追記します。

「図形オブジェクトの消去」の回答画像3
    • good
    • 0

「オブジェクトの選択」ではダメなんですか?


希望する範囲を指定して選択することができます。

すべてのオブジェクトを削除したいという事であれば、
「条件を選択してジャンプ」
からオブジェクトを選べばよいと思います。

マクロである必要ありますか?
    • good
    • 0

For Each oShape In ActiveSheet.Shapes


oShape.Delete
Next
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!