プロが教えるわが家の防犯対策術!

エクセルでB5~F18に掛けて表があります。
この表は毎日1表ずつ分あり、使わない日は右上から左下に向かって斜線を引きます。
オートシェイプで引いた線をマクロで記録して引いているのですが、誤って引いてしまった時の消去マクロが作れないかな、と考えているのですが、可能でしょうか?
マクロの記録で、オートシェイプをクリックしてDeleteとやってみたのですが、うまくいきません。
どうやら線を引くたびに番号がつくらしく、その番号の線を消す、という風に記録してしまう為、エラーになってしまうようです。
表に斜線が引ければ良い訳で、他に方法があるのならそれで構いませんし、表は印刷してペーパーで保管しています。
何か良い方法がありましたら、宜しくお願い致します。

ちなみに今、描写の為に使っているマクロは下記の通りです。

Sub Macro2()
ActiveSheet.Shapes.AddLine(15.75, 59.25, 323.25, 475.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
End Sub

A 回答 (7件)

オートシェイプでは重くなります。



ctrl+1(テンキー不可)

でダイアログを出します。

罫線タブで斜め線をひきます
(セルをまたぐ場合は結合しないととダメ)

後は出来ますか

この回答への補足

表には文字や計算式が入っていて、見た目を崩さずに上から線を引きたいんです。セルを統合してしまうと罫線や文字が消えてしまうんですよね。

補足日時:2004/11/17 22:50
    • good
    • 0

#1です



消す方法ではなく隠す方法

マクロの記録でオートシェイプを選択

コードを見て.selectを.visible=true
trueの反対はfalseを書きます

この回答への補足

selectを.visible=trueに置き換えたら、表に最初のマクロで引いた線と左右対称な線が描写されました。visible=falseを入れてみたら、直前に描写された線が左右対称に反転?しました。やり方が悪かったんでしょうか…謎です(^^;

補足日時:2004/11/17 22:46
    • good
    • 0

>どうやら線を引くたびに番号がつくらしく


その通りのようですよ。
>その番号の線を消す、という風に記録してしまう為、エラーになって
マクロの記録の限界ですね。この線(オブジェクト)の指定を相対化するのが勉強の難しいところと思います。
----
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でも良い。

この回答への補足

実はこれでも充分なんですが、アクティブシートの罫線が全部消えてしまいますよね。私が説明しなかったのが悪いのですが、実は表は1シートに6個あるんです。マクロはそれぞれの表に描写の為に6個あります。消すボタンも6個つけるとして、範囲を指定して消去することは出来るんでしょうか・・。もしこれが出来たら言うことなしです!

補足日時:2004/11/17 22:57
    • good
    • 0
この回答へのお礼

これです!見事にオートシェイプが消えました。ありがとうございます!

お礼日時:2004/11/17 22:57

セルを結合して罫線の斜線を引くマクロと


罫線の斜線を消去してセルの結合を解除するマクロ
を作るといいと思います。

この回答への補足

表には文字や計算式が入っていて、見た目を崩さずに上から線を引きたいんです。セルを統合してしまうと罫線や文字が消えてしまうんですよね。

補足日時:2004/11/17 23:03
    • good
    • 0

>表には文字や計算式が入っていて


#4です。
そうですね。私は、バカでした。いい加減なことをいってすみません。

#2で、左右反転するのは、
「Flip msoFlipHorizontal」だからです。

表の位置が決まっているなら
#2で言われるように、あらかじめ引いておいて、非表示にするのがいいかもしれませんね。
    • good
    • 0

#3です。


その補足の
>、範囲を指定して消去することは出来るんでしょうか
一晩考えたけれど、私のできる程度では良い方法はない。
(1)名前で判別
自分で分類した名前を付ければ,あるいは区別できるかも知れないが、多数あれば面倒だし、プログラム内固定なので事後増減すればお手上げ?。
Sub Macro2()
ActiveSheet.Shapes.Range(Array("Rectangle 9", "Line 10", "Oval 11")).Select
Selection.
のArrayの中を充実する。
(2)グループ化
グループ化が出来るようなので、これが使えるかも知れないが。捉え方(ネーミング)が私には判らないので勉強します。ただし事後の使用者の増減にはお手上げ?
(3)位置
「.Top」「,Left」の2つで範囲内にある図形かどうか
判別する。これも面倒そう。
    • good
    • 0
この回答へのお礼

度々ありがとうございます。範囲指定は難しそうですね・・・。前記の全部消去する方法で充分です(^^)ありがとうございました。

お礼日時:2004/11/18 18:40

#2です



対象のコピーはしていないです。

オブジェクトを全部削除。
オートシェイプで斜線を引いておく(全て)

マクロの記録でオブジェクトの選択
一つづつ連続選択
マクロ記録を停止

マクロの編集で
ActiveSheet.Shapes("Line 1").select
ActiveSheet.Shapes("Line 2").select

ActiveSheet.Shapes("Line 1").visible = true
'表示
ActiveSheet.Shapes("Line 2").visible = false
'非表示

で出来るはずなんですが
    • good
    • 0
この回答へのお礼

("Line 1")の部分が引く度に数字が増えていってしまうので、うまくいかないようです。斜線は引く日が決まっている訳ではなく、誤って引いて消去したい時も何番目の斜線なんだか予測出来ないので・・・。うまくは行きませんでしたが考えていただいてありがとうございました(^^)

お礼日時:2004/11/18 18:44

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