アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAで、あるファイルの、”実行”というシートでマクロを組んで、検討書”というシートのa1..d5までの値をクリアしたいので、次のようなコードを作ってみたのですが、実行時エラー1004となります。
どこを直せばいいのでしょうか?詳しい方教えてください。


Sub クリアー()
Sheets("検討書").Select
Range("a1:d5").Select
Selection.ClearContents
End Sub

A 回答 (3件)

マクロは「シートモジュール」ではなく


「標準モジュール」に記述するようにしましょう。
初心者さんは特に。

詳しくはこちらの「それでも知りたい人のために」のあたり。

マクロってどこに書けばいいの?
http://officetanaka.net/excel/vba/beginner/10.htm


Sheets("検討書").Select
これで「検討書」がアクティブシートになり、

Range("a1:d5").Select
これでマクロが記述されているシート「実行」のセル範囲を Select しようとしている。

結果、アクティブでないシートで Select することになるのでエラー発生、
ということです。
    • good
    • 0
この回答へのお礼

知らないうちに、マクロが「シートモジュール」になっていました。
「標準モジュール」に移したら上手くいきました。
ありがとうございました。

お礼日時:2019/10/28 21:08

No.2さんの解答は、私がいつも書いていることですが、


Select は止めましょう。Selectを使う場面は、非常に少ないです。

(こういう書き方を「最適化」と言います)
'------------------------
Sub クリアー2()
With Worksheets("検討書")  With ステートメントを使う
  .Range("A1:D5").ClearContents '先頭に「.」ドットが入ります。
End With
End Sub
    • good
    • 0

シート保護がかかっていたりしませんか?



回答ではありませんが以下のようにされた方が良いと思います。
Sub クリアー()
 Sheets("検討書").Range("A1:D5").ClearContents
End Sub
    • good
    • 0

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