VBAで列参照を使ってセルの内容を消去する

列参照を使って、いくつかのセルのデータを消去するコードを作成しようとしています。以下のようなコードを使用しています。

Worksheets(sheetname).Range(.Cells(2, LastColData), .Cells(LastRowData, LastColData)).ClearContents

しかし、最初の.Cellsセクションでエラーが発生します。これはなぜですか?

ソリューション

列全体を範囲指定してアクセスするには、Worksheet.Columnsオブジェクトを使用します。

以下のようになります。

Worksheets(sheetname).Columns(1).ClearContents 

はA列の内容を消去します。

同様のことを行に対して行いたい場合は、Worksheet.Rowsオブジェクトもあります。


表示されるエラーは、おそらくwithブロックがないことが原因です。

withブロックについてはこちらをご覧ください。マイクロソフトヘルプをご覧ください。

解説 (0)

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がコードの中でどのように、またどのような場合に役立つのかを理解していただけたと思います。

解説 (1)

その前にWith文が必要です。 あるいは、.CellsCellsにする。

解説 (1)