• ベストアンサー

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に書いていたプログラミングとは違うかもしれません。  もし、ヒントだけでもお分かりになる方がいらっしゃいましたら、ご教授いただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >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)
回答No.3

画面のちらつきをとめるだけなら、マクロの最初(変数定義後)に Application.ScreenUpdating = False 最後に Application.ScreenUpdating = True と書けば、この間で画面が更新されなくなります

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

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 以上です。

関連するQ&A