【Excelマクロ】セル・行列・シートの削除

Excelマクロ

Deleteメソッド

シート上の文字や罫線など消すには、Clearメソッドを中心に、ClearContentsやClearFormatsを利用しました。

セル・行・列・シート自体については、消去ではなく「削除」することになりますが、削除は「Deleteメソッド」を利用します。

削除することで考えないといけないのが、次の内容です。

①セルを削除すると、セルが移動する
②行を削除すると行が移動、列を削除すると列が移動する
③シートを削除すると、シートが移動する

この動作を行うと①だと1つのセルが消えるだけだと思いますが、移動する際には、それよりも下や右にあるセルが「すべて」移動することになります。

行や列も同じで、削除した行よりも下にある行が「すべて」移動することになり、列の場合にも、それよりも右にある列が「すべて」移動します。

そのため、Excelからするととても作業量が多い操作になるため、動作が重たくなる原因になります。

データを消すだけでよければ、Clearメソッドを優先して利用することをお勧めします。

セルの削除

セルの削除については、実際の動作では次のような流れになります。

1.セルを削除する
2.削除した後にセルが移動する

普段の操作では意識しないと思いますが、右クリック、削除、その後に「左方向にシフト」「上方向にシフト」と選択できるようになっています。

そのため、VBA上でも、「左方向にシフト」「上方向にシフト」を設定する必要があります。

例)A2を削除する
Cells(2,1).Delete Shift:=xlToLeft 左へ
Cells(2,1).Delete Shift:=xlToUp 上へ

このようにすれば、「削除して左へ」「削除して上へ」という動作をさせることができます。

セルの削除の引数

引数というのは動作を補助する役割をするものですが、今回の引数は「Shift」の部分です。

左か上かどちらに移動させるのかを設定することができます。

注意点としてはこちらを設定しない場合でも削除をすることができますが、省略した場合には、削除した後の方向が書いていないので次のような動作になります。

1.下に文字がある場合には上方向が優先
2.右に文字があると左方向にシフト

1→2の動作をするため、本来は左方向に移動させたかったのにも関わらず、上方向へ移動してしまう危険性があります。

削除した後の動きについて希望がある場合には、必ずShiftを利用して移動方向の設定をしてください。

列・行・シートの削除

セルの削除に対し、列・行の削除については削除後に次のような動きをします。

列の削除 → 左方向へシフト
行の削除 → 上方向へシフト
シートの削除 → 左方向へシフト

この動きについては「これ以外の選択肢がない」のでShiftを省略しても大きな問題にはなりません。

コードについては、次のように記載します。

例)
列の削除 Columns("B").Delete
行の削除 Rows(5).Delete
シートの削除 Sheets("Sheet1").Delete

まとめ

「Delete」については、「Clear」の「消去」と違い、「削除」となるので、セルの移動や、行列の移動が発生します。

そのため、体感はあまりありませんが、複数回実行すると、負荷が大きく、動作が重くなってしまう原因となります。

Clearで対応できる場合にはClearを優先して利用しましょう。

また、Shiftの引数については、セルの削除では必ず入れるようにしましょう。

コメント