- ベストアンサー
マクロで図形を一度に消去したい
マクロ初心者です。よろしくお願いいたします。 今スケジュール表をマクロで作成するプログラムを作ってます。 「ある実行項目をいつからいつまでの間にやる」というようなものです。 この「いつからいつまで」というのを矢印で書くようにしたいと思ってます。 日にちを入れれば、そこから矢印の座標を計算し矢印を描画するところまではできました。 しかしスケジュールには変更がつきものです。 日にちを修正して再度「矢印描画プログラム」を走らせると修正後の矢印は書いてくれますが、修正前の矢印は残ったままです(当然ですが)。これを消したいのです。 私としては、プログラムの最初に、まずシート上の図形(矢印)を全て消去して、それからあらためて日程に従って矢印を書き込んでいくというふうにしたいと思ってます。 こんなことってできますか?? よろしくお願いいたします。
- みんなの回答 (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
その他の回答 (4)
- oneworld
- ベストアンサー率29% (17/58)
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
お礼
何度もすみません。理解できました。 早速やってみます。ありがとうございました。
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 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
お礼
ありがとうございます。 う~ん…高度ですねぇ(少なくとも私にとっては)。 もっと勉強しなければいけませんね。 参考にさせていただきます。 ありがとうございました。
- kazuhiko5681
- ベストアンサー率49% (79/159)
はじめまして。 マクロの自動記録機能を使ってみてはどうでしょうか。操作手順は次のようにします。 1作業をするブックを開き、メニューバーのツール→マクロ→新しいマクロの記録と選択する。 2.マクロの記録というダイアログボックスが表示されるので、そのままOKボタンをクリックする。 3.あなた様のやりたいことを手操作で実行する。 4.作業が終了したら記録と書いてあるダイアログボックスの■ボタンをクリックし、ダイアログボックスを閉じる。 VBE画面を開くとモジュールシートが新規に作成されていますので、その中にあなたがされた作業をするためのコードが書かれています。 もし、モジュールシートが追加されていないときは、標準モジュールシートのどれかにコードが書かれていると思います。 何か解らないことがありましたら、お知らせ下さい。
補足
ありがとうございます。自動記録機能については最初にやってみました。 矢印がいっぱい引いてあるシート上で、ある範囲を選択しDeleteキーを押しました。 コードは次のとおりでした。 Sub Macro1() ActiveSheet.Shapes.Range(Array("Line 3", "Line 4")).Select Selection.Delete End Sub これを、作成中のマクロの先頭にそのまま入れても、 実行時エラー'1004': 指定した名前のアイテムが見つかりませんでした。 というメッセージが出て動きませんでした。 対処方法がよくわからなかったので、もっと手っ取り早い方法(範囲指定などせずイッキに消す方法)があるのではないかと思い、投稿した次第です。
- oneworld
- ベストアンサー率29% (17/58)
宜しければ、下記をお試しください。 Sub ZukeiClear() Worksheets(1).Shapes.SelectAll Selection.Delete End Sub
補足
ありがとうございます。試してみました。できました! でも…すみません…全部消すとマクロボタンまで消えてしまうのですね… ボタンだけ残すことはできませんか? ある指定の行の中にある図形(矢印)だけを消すなんてことできませんか? 最悪は、ボタンを使わずに、メニューバーからいちいちコマンドを選んで実行するようにすればいいのですが…できればボタンでやりたいのです。 申し訳ありませんがよろしくお願いいたします。
お礼
ありがとうございます。 そうですね!わかりやすいですね! これを使わせていただくことにしたいと思います。 ありがとうございました。