- ベストアンサー
削除のマクロ(エクセル)
Sub test() Selection.Delete Selection.Interior.ColorIndex = xlNone Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Selection.ClearContents End Sub 上記マクロは、まず図形が選択状態にある時はそれを削除します。 また、セルが選択状態にある時は、選択範囲内の文字を消し、罫線を消し、塗りつぶしの色を消します。 上記マクロを実行すると不具合が生じます。 選択範囲外のデータが消えたり、選択範囲外のセルが移動したりしてしまいます。 c5 d5 e5 f5 c6 d6 e6 f6 c7 d7 e7 f7 c8 d8 e8 f8 上記の全てのセルにデータが入力されている場合、d6:e7を選択してマクロを実行すると、d6:e8のデータが消えてしまいます。 d6:d7を選択してマクロを実行すると、d6:e7のデータが消える上にf6:f7が一セル分左に移動してしまいます。 マクロ内の"Selection.Delete"をコメントにして実行すると不具合は生じることなく、選択範囲内のデータだけに作用させることができます。 ただ、"Selection.Delete"を外すと、「図形が選択されている時は図形を削除する」ができなくなります。 どのようにマクロを修正すれば、セルのデータと図形のそれぞれを不具合なく削除させることができるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >どのようにマクロを修正すれば、セルのデータと図形のそれぞれを不具合なく削除させることができるでしょうか? このような場合、選択しているオブジェクトが何かによって処理を分けなければ、思ったように動作しないと思います。 選択しているオブジェクトが何なのかは、TypeName(Selection)で調べることが出来ます。 また、セル範囲の書式とデータを全て消すのは Clearメソッドを使えば良いと思います。 ↓のような感じでうまく行くと思いますがいかがでしょう? Sub test() If TypeName(Selection) = "Range" Then Selection.Clear Else Selection.Delete End If End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
下記のようなことを良くご存知でしたら、すみません。 プロパティやメソッドはObjectに対し実行するものです。 その実行できるプロパティやメソッドは、特定のObjectには決まっています。 具体的にこの質問には (A)Delete (B).Interior.ColorIndex (C)罫線処理 (D)Selection.ClearContents などが対象とされています。 SelectしたObjectがシートのRangeだけでなく、図形(オブジェクト という場合有り、特にShape)などを、本件ではSelectする場合を コードの後の質問文章から見て、考えているようですね。 であれば、コード上で (x)Objectのタイプを判別し、そのObjectにごとに通用する プロパティやメソッドについて記述する。(TypeName(Selection)でIf・・EndIf) (y)別モジュールにする (Z)Objectのタイプをコード上で限定してしまう 必要があるでしょう。 その場合に、各Objectについて、 消去はどう、 罫線や外枠線の消去はどう 色塗りつぶしはどう 内容(値)・テキストの消去はどう という、プロパティやメソッド であるかを調べたり、確認する必要があります。 実は同じ名称でも、プロパティやメソッドによって 引数の表現に違いがある例がありました。 上記がはっきり認識してコードが作られておらず、結果思うとおりに 行かないと言ってませんか。 結論的には#1のご回答のように改良することになると思います。 例えばオートシェイプに対し、質問の罫線のコードはエラーになりました。 Selection.ClearContentsは、オートシェイプに対しエラーになりました。 ーーー 上記を考慮のうえ修正が必要であれば修正してなおかつ 「上記の全てのセル・・・」 以下の現象が起こりますか。
お礼
ご丁寧な解説、有難うございました。
お礼
有難うございました。 うまくいきました。