ExcelVBA(マクロ)でセル・行・列を削除し、間を詰める方法/Deleteメソッドの使い方

IT

Excelマクロで「削除」にあたる命令は、Deleteメソッドと呼ばれます。範囲を指定してメソッドを実行することで、セルを削除することが可能です。
もし間を詰めずに内容だけを削除したい場合は、ClearContentsメソッドなどを使用します。

Advertisements

Deleteメソッドの使い方

オブジェクト(セル・範囲など)を削除する
対象.delete

Deleteメソッドでは、セル・横(行)一列・範囲を削除した場合は下のセルが上に、縦(列)一列を削除した場合には右のセルが左に移動し、空いた場所を補完します。

dlt1
まずはこの表から、A1セルを削除してみましょう。
dlt2
マクロを開き、Range(“A1”).DeleteA1を削除と入力します。
dlt3
A1が削除され、その下のA列がひとつずつ上にズレて空いた箇所を埋めました。
dlt4
同様に見ていきましょう。ふたたびマクロを開き、今度はRange(“A1:A4”).Deleteに修正します。
dlt1_2
範囲で言うと縦(列)一列になります。これを実行すると……。
dlt5
空いた列を埋めるように右のセルがひとつずつズレました。
dlt6
Range(“A1:C1”).Deleteに修正します。
dlt1_3
範囲で言うと横(行)一列になります。これを実行すると……。
dlt7
空いた箇所を埋めるように下のセルがひとつずつズレました。
dlt1_4
最後に範囲を削除してみます。
dlt8
Range(“A1:B2”).Deleteに修正します。
dlt9
実行すると、空いた箇所を埋めるように下のセルがひとつずつズレました。

範囲を詰める方向を指定したい場合

Deleteメソッドの後ろに、引数を指定することで詰める方向を指定することが可能です。

セルを削除し、左方向に詰める
対象.delete xlshifttoleft
(または対象.delete -4159

セルを削除し、上方向に詰める
対象.delete xlshiftup
(または対象.delete -4162

4159とか4162とかはモールス信号みたいなもので、数字自体に意味はありません。これだと覚えにくいので作られたのがxl~の引数で、こういう変更できない予め用意された変数を「組み込まれた」「定められた数」=組み込み定数と呼びます。

xlshifttoleft1
範囲を削除し、D列を左に詰めてA列まで持ってきたいと思います。
xlshifttoleft2
この場合はrange(“A1:C4”).delete xlshifttoleftと記述するか、
xlshifttoleft3
またはrange(“A1:C4”).delete -4159と記述します。
xlshifttoleft4
A~C列の範囲が削除され、右にある列が左に詰められました。
xlshifttoleft5
上に詰める場合も同様です。
xlshifttoleft6
range(“A1:A4”).delete xlshiftupと記述するか、
xlshifttoleft7
またはrange(“A1:A4”).delete -4162と記述します。
xlshifttoleft8
A1~A4が削除され、下にあるセルが上に詰められました。

Deleteメソッドはセルの他にもオブジェクト全般削除に用いますが、ワークシートの削除の場合には警告メッセージが表示されて結局手動になるので、一手間かける必要があります。
マクロでオブジェクトを削除する方法については以上です。

やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント