- ベストアンサー
エクセル2002マクロ オートシェイプの消去方法を教えて下さい
エクセルでB5~F18に掛けて表があります。 この表は毎日1表ずつ分あり、使わない日は右上から左下に向かって斜線を引きます。 オートシェイプで引いた線をマクロで記録して引いているのですが、誤って引いてしまった時の消去マクロが作れないかな、と考えているのですが、可能でしょうか? マクロの記録で、オートシェイプをクリックしてDeleteとやってみたのですが、うまくいきません。 どうやら線を引くたびに番号がつくらしく、その番号の線を消す、という風に記録してしまう為、エラーになってしまうようです。 表に斜線が引ければ良い訳で、他に方法があるのならそれで構いませんし、表は印刷してペーパーで保管しています。 何か良い方法がありましたら、宜しくお願い致します。 ちなみに今、描写の為に使っているマクロは下記の通りです。 Sub Macro2() ActiveSheet.Shapes.AddLine(15.75, 59.25, 323.25, 475.5).Select Selection.ShapeRange.Flip msoFlipHorizontal End Sub
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>どうやら線を引くたびに番号がつくらしく その通りのようですよ。 >その番号の線を消す、という風に記録してしまう為、エラーになって マクロの記録の限界ですね。この線(オブジェクト)の指定を相対化するのが勉強の難しいところと思います。 ---- Sub test03() Dim 図形 As Shape For Each 図形 In ActiveSheet.Shapes If 図形.Type = msoLine Then 図形.Delete '図形を削除する End If Next End Sub これを実行してみて、いかがでしょうか。 (参考) 名前の捉え方 Sub test02() n = Selection.Name MsgBox n Worksheets("sheet5").DrawingObjects(n).Delete End Sub Sheet名は適宜変えるか、Activesheetでも良い。
その他の回答 (6)
#2です 対象のコピーはしていないです。 オブジェクトを全部削除。 オートシェイプで斜線を引いておく(全て) マクロの記録でオブジェクトの選択 一つづつ連続選択 マクロ記録を停止 マクロの編集で ActiveSheet.Shapes("Line 1").select ActiveSheet.Shapes("Line 2").select ActiveSheet.Shapes("Line 1").visible = true '表示 ActiveSheet.Shapes("Line 2").visible = false '非表示 で出来るはずなんですが
お礼
("Line 1")の部分が引く度に数字が増えていってしまうので、うまくいかないようです。斜線は引く日が決まっている訳ではなく、誤って引いて消去したい時も何番目の斜線なんだか予測出来ないので・・・。うまくは行きませんでしたが考えていただいてありがとうございました(^^)
- imogasi
- ベストアンサー率27% (4737/17069)
#3です。 その補足の >、範囲を指定して消去することは出来るんでしょうか 一晩考えたけれど、私のできる程度では良い方法はない。 (1)名前で判別 自分で分類した名前を付ければ,あるいは区別できるかも知れないが、多数あれば面倒だし、プログラム内固定なので事後増減すればお手上げ?。 Sub Macro2() ActiveSheet.Shapes.Range(Array("Rectangle 9", "Line 10", "Oval 11")).Select Selection. のArrayの中を充実する。 (2)グループ化 グループ化が出来るようなので、これが使えるかも知れないが。捉え方(ネーミング)が私には判らないので勉強します。ただし事後の使用者の増減にはお手上げ? (3)位置 「.Top」「,Left」の2つで範囲内にある図形かどうか 判別する。これも面倒そう。
お礼
度々ありがとうございます。範囲指定は難しそうですね・・・。前記の全部消去する方法で充分です(^^)ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>表には文字や計算式が入っていて #4です。 そうですね。私は、バカでした。いい加減なことをいってすみません。 #2で、左右反転するのは、 「Flip msoFlipHorizontal」だからです。 表の位置が決まっているなら #2で言われるように、あらかじめ引いておいて、非表示にするのがいいかもしれませんね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
セルを結合して罫線の斜線を引くマクロと 罫線の斜線を消去してセルの結合を解除するマクロ を作るといいと思います。
補足
表には文字や計算式が入っていて、見た目を崩さずに上から線を引きたいんです。セルを統合してしまうと罫線や文字が消えてしまうんですよね。
#1です 消す方法ではなく隠す方法 マクロの記録でオートシェイプを選択 コードを見て.selectを.visible=true trueの反対はfalseを書きます
補足
selectを.visible=trueに置き換えたら、表に最初のマクロで引いた線と左右対称な線が描写されました。visible=falseを入れてみたら、直前に描写された線が左右対称に反転?しました。やり方が悪かったんでしょうか…謎です(^^;
オートシェイプでは重くなります。 ctrl+1(テンキー不可) でダイアログを出します。 罫線タブで斜め線をひきます (セルをまたぐ場合は結合しないととダメ) 後は出来ますか
補足
表には文字や計算式が入っていて、見た目を崩さずに上から線を引きたいんです。セルを統合してしまうと罫線や文字が消えてしまうんですよね。
お礼
これです!見事にオートシェイプが消えました。ありがとうございます!
補足
実はこれでも充分なんですが、アクティブシートの罫線が全部消えてしまいますよね。私が説明しなかったのが悪いのですが、実は表は1シートに6個あるんです。マクロはそれぞれの表に描写の為に6個あります。消すボタンも6個つけるとして、範囲を指定して消去することは出来るんでしょうか・・。もしこれが出来たら言うことなしです!