技術系

(VBA)表の範囲のデータだけ消去する方法

表の範囲削除

エクセルVBAでは、表の範囲のデータだけを一度クリア(表の初期化)してから処理することが多いと思います。
たとえば、表に検索結果を表示する場合は前回の検索結果を一度消去した上で今回の検索結果を表示しないといけませんよね。

この場合、項目名や計算式の入ってないセルのみ(すなわちデータ部分のみ)を消去しなければなりません。

表の項目名を残してデータだけ消去する

サンプル表(消去前)

上記の表の場合、項目名であるNO,と名前と住所と年齢を残して消去します。


コードはこちらです。

Sub サンプル()
Range("A1").CurrentRegion.Offset(1,0).ClearContents
End Sub

まずRange("A1").CurrentRegionでA1セルが含まれている表(今回の表)の範囲を明確にします。
これはRange("A1:D10")となります。

次に.Offset(1,0)を使って先ほど確定した範囲をずらします。
Offset(ずらす行数, ずらす列数) という形で指定します。
今回は.Offset(1,0)で下方向に1行分ずらしていて、これにより対象の範囲がRange("A1:D10") からRange("A2:D11")へと内部的に変化します。
(11行目まで対象範囲に含まれてしまいますが、何もデータの入っていないセルのため問題ありません。)

そして最後に.ClearContentsメソッドを使ってデータを消去します。(中央寄せなど書式を残したい場合は.Clearを使ってください)

サンプル表(消去後)

なお、A列のNo.の項目はデータ(1,2,3...)を消さずに残したいという場合は.Offset(1,1)としてあげれば対象範囲がRange("B2:E11")となりA列のデータだけ残すことができます。

-技術系
-,