VBAで行を削除する基本と応用テクニック

Excelで大量のデータを扱っていると、「特定の条件に合う行だけ削除したい」「空白行を一括で削除したい」といった場面が出てきます。こうした作業を手作業で行うのは非常に効率が悪く、ミスも起こりがちです。そこで便利なのが、Excel VBA(マクロ)による自動処理です。本記事では、VBAを使って行を削除する基本的な方法から、条件付き削除や複数行の一括削除といった応用テクニックまで、実例を交えてわかりやすく解説します。VBA初心者の方にも理解しやすいように構成していますので、ぜひ参考にしてください。


VBAで行を削除する基本的な方法

VBAで行を削除するもっとも基本的な書き方は、RowsオブジェクトやRangeオブジェクトのDeleteメソッドを使う方法です。以下のようなコードで任意の行を削除することができます。

Sub DeleteRow()
Rows(3).Delete
End Sub

このコードは、3行目を削除するシンプルなマクロです。また、Rangeを使っても同様のことができます。

Sub DeleteRowByRange()
Range("A5").EntireRow.Delete
End Sub

このように、対象のセル範囲に対してEntireRow.Deleteを指定することで、そのセルが含まれる行全体を削除できます。


条件に合致する行を削除する方法

実務では「ある列の値が特定の値だった場合に行を削除したい」というケースが多くあります。たとえば、列Aに「削除」という文字が含まれる行を削除する例を見てみましょう。

Sub DeleteRowsWithCondition()
Dim i As Long
Dim lastRow As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = lastRow To 1 Step -1
If Cells(i, 1).Value = "削除" Then
Rows(i).Delete
End If
Next i
End Sub

このコードでは、ループを下から上へ処理しています。上から削除していくと、削除した瞬間に行の番号がずれてしまい、思ったように動かないことがあるためです。


空白行を一括で削除する方法

データ処理の中で、空白行を削除したいという場面も頻繁にあります。以下のコードは、列Aが空白の行をすべて削除するマクロです。

Sub DeleteBlankRows()
Dim i As Long
Dim lastRow As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = lastRow To 1 Step -1
If Trim(Cells(i, 1).Value) = "" Then
Rows(i).Delete
End If
Next i
End Sub

Trim関数を使うことで、スペースしか入力されていない場合も空白として認識できます。


フィルターで絞り込んだ行を削除する方法

オートフィルターを使って特定の条件で絞り込んだ後、その表示されている行だけを削除する方法もあります。

Sub DeleteFilteredRows()
Dim ws As Worksheet
Set ws = ActiveSheet

With ws
.Range("A1").AutoFilter Field:=1, Criteria1:="削除"
.Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilterMode = False
End With
End Sub

この方法のポイントは、SpecialCells(xlCellTypeVisible)を使ってフィルター表示されている行だけを対象にしている点です。


複数の条件で行を削除する応用例

複数条件で行を削除したい場合、条件を組み合わせてIf文を工夫する必要があります。例えば、「列Aが空白、かつ列Bが0の場合に削除する」といった例です。

Sub DeleteRowsMultipleConditions()
Dim i As Long
Dim lastRow As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = lastRow To 1 Step -1
If Trim(Cells(i, 1).Value) = "" And Cells(i, 2).Value = 0 Then
Rows(i).Delete
End If
Next i
End Sub

条件の数が多くなる場合は、処理の見通しを良くするために、別関数として条件式だけ切り出すこともおすすめです。


行削除時の注意点とエラー対策

行削除のマクロでよくあるトラブルとその対策をまとめておきます。

  • 上から削除してしまう問題
     → ループは下から上に向かって回す
  • 削除対象のセルが存在しない場合のエラー
     → On Error Resume NextIf Not rng Is Nothing Then で対策する
  • フィルター使用後にAutoFilterModeが残る
     → 最後に .AutoFilterMode = False を入れてリセット
  • Undo(元に戻す)ができない
     → マクロ実行前に保存しておく、必要に応じてバックアップファイルを作る

実行前にバックアップを取ろう

VBAで行削除を行うと、基本的には「元に戻す」ができません。そのため、実行前にはブックを保存するか、バックアップを作成することが重要です。特に一括削除マクロでは、意図しない削除が発生することもあるため、事前対策を習慣にしましょう。

Sub SaveBackup()
Dim path As String
path = ThisWorkbook.Path & "\" & "Backup_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsm"
ThisWorkbook.SaveCopyAs path
MsgBox "バックアップを作成しました: " & path
End Sub

このようにして、削除マクロを実行する前にワンクリックでバックアップできる仕組みを作っておくと安心です。


まとめ

VBAで行を削除する方法は多岐に渡りますが、基本となるDeleteメソッドを正しく使いこなすことが第一歩です。単一行の削除から、条件付き削除、空白行やフィルター活用による削除など、実務で役立つパターンはさまざまあります。本記事のコード例を自分のExcelシートに応じて少しずつアレンジしていくことで、VBAの理解も深まっていくはずです。

作業効率化の第一歩として、ぜひVBAでの行削除テクニックをマスターしてください。

タイトルとURLをコピーしました