6/20/2022

Excel。VBA。見出し行を除いた範囲を手早く削除するにはどうしたらいい【Range selection】

Excel。VBA。見出し行を除いた範囲を手早く削除するにはどうしたらいい

<Excel VBA:Resizeプロパティ>

簡単な処理でも、何度も行うと、面倒になってきます。

まして、簡単になればなるほど面倒です。


例えば、次のデータ。


見出し行を残して、データだけを削除する作業など、面倒な作業の一つといえます。


しかも、データ量がその都度、異なっているとか、データ量が膨大だったりすれば、範囲選択も面倒な作業となってきます。


手早く処理をしたいので、Excel VBAでプログラム文を考えてみることにしましょう。


Sub 見出し行除き範囲()

    Dim rw As Integer

    Dim cl As Integer

    rw = Range("a1").CurrentRegion.Rows.Count

    cl = Range("a1").CurrentRegion.Columns.Count 

    Range("a2").Resize(rw - 1, cl).Clear

End Sub


たった、数行ですが、作業効率が改善することができます。


まずは、実行していましょう。


このように、見出し行だけを残して、データを削除することができました。


それでは、プログラム文を確認しておきましょう。


最初は、お馴染みの変数宣言です。

Dim rw As Integer

行数の変数として、rwを用意しました


Dim cl As Integer

列数の変数として、clを用意しました。


rw = Range("a1").CurrentRegion.Rows.Count

データの行数をrwに代入する作業をしています。

当たり前ですが、途中に空白があると範囲選択が表の途中になってしまうので、注意が必要です。

今回は、データベースのルールに則っているものとしています。


cl = Range("a1").CurrentRegion.Columns.Count

データの列数を代入するのがclです。


これで、rwとclの情報から表全体の大きさがわかります。


そして、見出し行を除いた範囲選択とデータの削除を行うのが、次のプログラム文です。

Range("a2").Resize(rw - 1, cl).Clear


A2を起点としています。これは、見出し行の直下の左隅セルです。

今回のポイントである、Resizeプロパティで、見出し行を除いた範囲を選択します。

Resize(rw - 1, cl)


Resizeプロパティは、

Resize(行数,列数)という引数をもっています。

行数をrwに代入しましたが、見出し行を除きたいので、「-1」しています。


最後は、削除したいので、「Clear」として、完成しました。


Resizeを使わないで、

Range("a2").CurrentRegion. Clear

とすると、A2以降の隣接する範囲ではなくて、A2も含めた隣接する範囲が対象になってしまうので、見出し行も削除することになります。


そのため、「CurrentRegion」ではなく、「Resize」をつかう必要があるわけです。


今回のように何気ない簡単な作業も、Excel VBAでプログラムをつくることで、作業効率が改善するかもしれませんね。