• ベストアンサー

マクロで図形を一度に消去したい

マクロ初心者です。よろしくお願いいたします。 今スケジュール表をマクロで作成するプログラムを作ってます。 「ある実行項目をいつからいつまでの間にやる」というようなものです。 この「いつからいつまで」というのを矢印で書くようにしたいと思ってます。 日にちを入れれば、そこから矢印の座標を計算し矢印を描画するところまではできました。 しかしスケジュールには変更がつきものです。 日にちを修正して再度「矢印描画プログラム」を走らせると修正後の矢印は書いてくれますが、修正前の矢印は残ったままです(当然ですが)。これを消したいのです。 私としては、プログラムの最初に、まずシート上の図形(矢印)を全て消去して、それからあらためて日程に従って矢印を書き込んでいくというふうにしたいと思ってます。 こんなことってできますか?? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishishi
  • ベストアンサー率39% (17/43)
回答No.5

No.3の方とやり方はほとんど同じです。 AutoShapeTypeが-2の場合は直線(矢印を含む) を削除します。 AutoShapeTypeで削除したい図形を特定できるの ならばこちらが簡単だと思います。 Private Sub Button1_Click() Dim s As Shape For Each s In ActiveSheet.Shapes If s.AutoShapeType = -2 Then s.Delete End If Next End Sub

tarobei
質問者

お礼

ありがとうございます。 そうですね!わかりやすいですね! これを使わせていただくことにしたいと思います。 ありがとうございました。

その他の回答 (4)

  • oneworld
  • ベストアンサー率29% (17/58)
回答No.4

No.1です。 お待たせいたしました。 Private Sub Button1_Click()   Dim n As Integer   Dim ZukeiNo As Integer   ZukeiNo = 1   For n = 1 To Shapes.Count     If Left(Shapes(ZukeiNo).Name, 6) = "Button" Then     ' 6は"Button"の文字数です    "Button"はボタン名と同じにして下さい         ZukeiNo = ZukeiNo + 1       Else         Shapes(ZukeiNo).Delete     End If   Next End Sub

tarobei
質問者

お礼

何度もすみません。理解できました。 早速やってみます。ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんにちは。 aaaは、セルを選択した範囲のシェイプを削除します。 シェイプを選択した時に出る四角形の左上が、選択した セル内である場合削除します。 Sub aaa() Dim sh As Shape, r As Range  If TypeName(Selection) <> "Range" Then Exit Sub  For Each sh In ActiveSheet.Shapes   Set r = Application. _     Intersect(Selection, sh.TopLeftCell)   If Not r Is Nothing Then sh.Delete  Next sh End Sub bbbはオートシェイプを削除します。 更に矢印だけとかの場合は、AutoShapeType を調べて 判断します。(コメントアウト部分を生かすとオート シェイプの左向き矢印を削除します) Arrowだけでも一杯あるので、どのArrowか自分で調べ てください。 Sub bbb() Dim sh As Shape  For Each sh In ActiveSheet.Shapes   If sh.Type = msoAutoShape Then    'If sh.AutoShapeType = msoShapeLeftArrow Then      sh.Delete    'End If   End If  Next sh End Sub

tarobei
質問者

お礼

ありがとうございます。 う~ん…高度ですねぇ(少なくとも私にとっては)。 もっと勉強しなければいけませんね。 参考にさせていただきます。 ありがとうございました。

回答No.2

はじめまして。 マクロの自動記録機能を使ってみてはどうでしょうか。操作手順は次のようにします。 1作業をするブックを開き、メニューバーのツール→マクロ→新しいマクロの記録と選択する。 2.マクロの記録というダイアログボックスが表示されるので、そのままOKボタンをクリックする。 3.あなた様のやりたいことを手操作で実行する。 4.作業が終了したら記録と書いてあるダイアログボックスの■ボタンをクリックし、ダイアログボックスを閉じる。 VBE画面を開くとモジュールシートが新規に作成されていますので、その中にあなたがされた作業をするためのコードが書かれています。 もし、モジュールシートが追加されていないときは、標準モジュールシートのどれかにコードが書かれていると思います。 何か解らないことがありましたら、お知らせ下さい。

tarobei
質問者

補足

ありがとうございます。自動記録機能については最初にやってみました。 矢印がいっぱい引いてあるシート上で、ある範囲を選択しDeleteキーを押しました。 コードは次のとおりでした。 Sub Macro1() ActiveSheet.Shapes.Range(Array("Line 3", "Line 4")).Select Selection.Delete End Sub これを、作成中のマクロの先頭にそのまま入れても、 実行時エラー'1004': 指定した名前のアイテムが見つかりませんでした。 というメッセージが出て動きませんでした。 対処方法がよくわからなかったので、もっと手っ取り早い方法(範囲指定などせずイッキに消す方法)があるのではないかと思い、投稿した次第です。

  • oneworld
  • ベストアンサー率29% (17/58)
回答No.1

宜しければ、下記をお試しください。 Sub ZukeiClear()   Worksheets(1).Shapes.SelectAll   Selection.Delete End Sub

tarobei
質問者

補足

ありがとうございます。試してみました。できました! でも…すみません…全部消すとマクロボタンまで消えてしまうのですね… ボタンだけ残すことはできませんか? ある指定の行の中にある図形(矢印)だけを消すなんてことできませんか? 最悪は、ボタンを使わずに、メニューバーからいちいちコマンドを選んで実行するようにすればいいのですが…できればボタンでやりたいのです。 申し訳ありませんがよろしくお願いいたします。

関連するQ&A