列参照を使って、いくつかのセルのデータを消去するコードを作成しようとしています。以下のようなコードを使用しています。
Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents
しかし、最初の.Cellsセクションでエラーが発生します。これはなぜですか?
列全体を範囲指定してアクセスするには、Worksheet.Columns
オブジェクトを使用します。
以下のようになります。
Worksheets(sheetname).Columns(1).ClearContents
はA列の内容を消去します。
同様のことを行に対して行いたい場合は、Worksheet.Rows
オブジェクトもあります。
表示されるエラーは、おそらくwithブロックがないことが原因です。
withブロックについてはこちらをご覧ください。マイクロソフトヘルプをご覧ください。
Gary's Studentが述べているように、最初に書いたコード通りに動作させるには、Cells
の前のドットを削除する必要があります。 1行のコードしか書いていないので確証はありませんが、ドットを削除したときに出たエラーは、変数の定義方法に関係しているかもしれません。
私は、変数を整数として定義してあなたのコードを実行したところ、動作しました。
Sub TestClearLastColumn()
Dim LastColData As Long
Set LastColData = Range("A1").End(xlToRight).Column
Dim LastRowData As Long
Set LastRowData = Range("A1").End(xlDown).Row
Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents
End Sub
しかし、もし使うとしたら、操作するオブジェクトを定義した行の最初に「With」を入れてください。以下は、不要な With
文を使って書き換えられたコードです。
With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
.ClearContents
End With
Withステートメントは、コードを再入力する手間を省き、コードを読みやすくするためのものです。 一つのオブジェクトで複数のことを行う場合に便利で適切になります。例えば、カラムを赤にして太い黒のボーダーも追加したい場合は、次のような
With` ステートメントを使用します。
With Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData))
.ClearContents
.Interior.Color = vbRed
.BorderAround Color:=vbBlack, Weight:=xlThick
End With
そうでなければ、次のようにアクションやプロパティごとに範囲を宣言しなければなりません。
Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).ClearContents
Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).Interior.Color = vbRed
Worksheets("Sheet1").Range(Cells(2, LastColData), Cells(LastRowData, LastColData)).BorderAround Color:=vbBlack, Weight:=xlThick
これで、Gary'Studentが、コンパイラが(不適切であるにもかかわらず)With
を期待しているのではないかと考えた理由と、With
がコードの中でどのように、またどのような場合に役立つのかを理解していただけたと思います。