VBAでセル・行・列・シートを削除する方法|Deleteメソッドの使い方とClearとの違い

VBAでセル・行・列・シートを削除するには Delete メソッドを使います。ただし削除するとその後のセルや行が詰まって移動するので、値だけ消したい場合は ClearContents の方が安全でパフォーマンスも良いです。

この記事では、次の内容を順番に解説します。

  • セルを削除するときのShift引数の使い方
  • 行・列・シートの削除方法
  • DeleteとClearContentsの使い分け

セルを削除するには?

セルを削除すると、隣接するセルが詰まって移動します。どちら方向に詰めるかを Shift 引数で指定します。

' A2セルを削除して上方向に詰める
Cells(2, 1).Delete Shift:=xlShiftUp

' A2セルを削除して左方向に詰める
Cells(2, 1).Delete Shift:=xlShiftToLeft

Shift を省略すると、Excelが自動で方向を判断しますが、意図しない方向に詰まることがあります。セルの削除では必ず Shift を指定しましょう。

行・列・シートを削除するには?

行・列・シートの削除は移動方向が決まっているので、Shift の指定は不要です。

' 5行目を削除する(下の行が上に詰まる)
Rows(5).Delete

' B列を削除する(右の列が左に詰まる)
Columns("B").Delete

' Sheet1を削除する
Sheets("Sheet1").Delete

シートを削除すると「元に戻せません」という確認ダイアログが表示されます。マクロの中でダイアログを出したくない場合は、前後に Application.DisplayAlerts = False を入れてください。

' 確認ダイアログなしでシートを削除する
Application.DisplayAlerts = False
Sheets("Sheet1").Delete
Application.DisplayAlerts = True

DeleteとClearContentsはどう使い分ける?

「値だけ消したい」のか「行や列ごと消したい」のかで使い分けます。

  • ClearContents:セルの値だけを消す。セルの位置は変わらない。処理が軽い。
  • Delete:セルや行・列ごと削除して、後続のセルを詰める。処理が重い。
' 値だけ消す(セルは動かない)
Range("A2:A10").ClearContents

' 行ごと削除する(下の行が上に詰まる)
Rows(5).Delete

大量のデータを繰り返し削除するとExcelへの負荷が大きくなります。値を消すだけでよい場合は ClearContents を優先しましょう。

まとめ

  • セルの削除Cells(行, 列).Delete Shift:=xlShiftUp または xlShiftToLeft
  • 行の削除Rows(5).Delete
  • 列の削除Columns("B").Delete
  • シートの削除Sheets("Sheet1").Delete(ダイアログを出さない場合はDisplayAlertsをFalseに)
  • 値だけ消すならClearContents の方が処理が軽くて安全。

よくある質問

複数行をまとめて削除するには?

Rows("3:5").Delete のように行番号の範囲を指定します。離れた行をまとめて削除する場合は Range("3:3,5:5").Delete のようにカンマで区切って指定できます。ただし離れた行の削除は処理が重くなりやすいので、ループで1行ずつ削除するよりも、まとめて指定する方が効率的です。

条件に一致する行だけ削除したい場合は?

ループで条件をチェックしながら削除するときは、最終行から上に向かってループするのが基本です。上から削除していくと行番号がずれて、意図しない行が飛ばされることがあります。For i = lastRow To 2 Step -1 のように逆順にループしましょう。

削除した後にCtrl+Zで元に戻せる?

VBAで実行した削除はCtrl+Zで元に戻せないことがほとんどです。特に Delete メソッドはExcelの「元に戻す」履歴に残らないため、実行前にバックアップを取るか、確認ダイアログを入れておくと安心です。

行削除と行のClearの速度はどれくらい違う?

Deleteは行が詰まる分、Excelが大量のセルを移動する処理が走るため、ClearContentsよりも処理が重くなります。大量のデータを繰り返し削除するマクロでは、DeleteをClearContentsに変えるだけで大幅に速くなることがあります。

シートを削除するときに確認ダイアログを出したままにする方法は?

DisplayAlerts を変更しなければダイアログが表示されます。他の人も使うマクロで誤削除を防ぎたい場合は、あえてダイアログを表示させたままにするか、MsgBoxで独自の確認を入れてから削除する方が安全です。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール