- ベストアンサー
Excel VBA セルの選択と消去
ご覧いただき、ありがとうございます。 最近、会社のPCでExcelでのVBAプログラミングの練習をしています。 先頭ページにボタンをつけて、マクロを設定していますが、以下の動作が どうしてもできません。 ・別シート(WORKとしておきます)にある表のデータをクリアしたい ・クリアしたいのは、WORKシートのA5、B5セル以下のデータが入力されている個所すべて ・以下のプログラムを書いてみたが、エラーになる WorkSheets("WORK").Range("A5:B5", Range("A5:B5").End(x|down)). ClearContents 上記の構文に問題があるのはメッセージから分かるのですが、何が悪いのかが分かりません。 WORKシートをSelecしてセルをSelect、Selection.ClearContentsだと上手くいくのですが、画面のちらつきが気になるので、できるならば、先頭ページから遷移せずに実行させたいです。 現在、自宅のPCから質問を入力しているので、会社PCに書いていたプログラミングとは違うかもしれません。 もし、ヒントだけでもお分かりになる方がいらっしゃいましたら、ご教授いただければと思います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >WorkSheets("WORK").Range("A5:B5", Range("A5:B5").End(x|down)). ClearContents 二つの問題があります。Rangeの中のRange("A5:B5")は、親オブジェクトを考慮されていません。 ここでは、Worksheet("WORK")が、親オブジェクトですが、次の中のRangeは、別の場所を指しているようです。 それと、Excelでは、マクロは基本的には、標準モジュールにおきます。 ただ、根本的に、マクロの目的が、 「WORKシートのA5、B5セル以下のデータが入力されている個所すべて」 ということでしたら、コード自体がうまくありません。 3つを比較してみてください。 Range や Cells の前に、「.(ビリオド)」が入っていますので、注意してください。 '------------------------------------------- Sub MacroTest1() With Worksheets("WORK") 'A列の判定しかできていません。 .Range("A5:B5", .Range("A5:B5").End(xlDown)).ClearContents End With End Sub Sub MacroTest2() With Worksheets("WORK") 'A列の判定で、B列のデータがA列よりも深いところにあるデータは消えません。 .Range("A5", .Range("A65536").End(xlUp).Offset(, 1)).ClearContents End With End Sub Sub MacroTest3() With Worksheets("WORK") 'A5以降にあるA:Bのデータはすべて消す .Range(.Cells(5, 1), .Cells(.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row, 2)).ClearContents End With End Sub
その他の回答 (2)
- Trick--o--
- ベストアンサー率20% (413/2034)
画面のちらつきをとめるだけなら、マクロの最初(変数定義後)に Application.ScreenUpdating = False 最後に Application.ScreenUpdating = True と書けば、この間で画面が更新されなくなります
- myRange
- ベストアンサー率71% (339/472)
WorkシートをSelectしないのなら、 Rangeオブジェクトの前にはシート名を付けましょう。 それから、もひとつミスあり。 >WorkSheets("WORK").Range("A5:B5", Range("A5:B5").End(x|down)). ClearContents Worksheets("WORK").Range("A5", Worksheets("WORK").Range("B5").End(xlDown)).ClearContents 以上です。