Excel VBA 行の不要データを自動で削除|表の整理やデータ処理する方法

 

ExcelVBA  行の不要データを自動で削除して表の整理やデータ処理を効率化する。使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る

 

Excel VBA  行の不要データを自動で削除|シーン

以下のシーンで利用します。

1.特定の条件を満たす行(例: 空白行、特定の値を含む行)を削除する。

2.ユーザーが選択した行を削除する。

3.範囲を指定して一括で行を削除する。

4.データ整理のために不要な行を削除する。

 

Excel VBA  行の不要データを自動で削除サンプルコード

選択した行を削除する
ユーザーが削除したい行を手動で選択し、ボタンなどで削除を実行する場合

Option Explicit

Sub DeleteSelectedRow() '標準モジュール
    If Not TypeOf Selection Is Range Then
        MsgBox "セルを選択してください。", vbExclamation, "エラー"
        Exit Sub
    End If
    
    Selection.EntireRow.Delete
End Sub

・セルを選択していない場合にエラーを防ぐ処理を入れている。
・Selection.EntireRow.Delete で選択したセルの行を削除。

指定した行を削除する(例: 5行目を削除)

Option Explicit

Sub DeleteRow5() '標準モジュール
    Rows(5).Delete
End Sub

空白行を削除する(A列が空白の行を削除)

Option Explicit

Sub DeleteEmptyRows() '標準モジュール
    Dim ws As Worksheet
    Dim i As Long
    
    Set ws = ActiveSheet
    For i = ws.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If ws.Cells(i, 1).Value = "" Then
            ws.Rows(i).Delete
        End If
    Next i
End Sub

・Cells(Rows.Count, 1).End(xlUp).Row でA列の最終行を取得
・For i = 最終行 To 1 Step -1 で後ろから削除(削除時の行ズレを防ぐ)
・If ws.Cells(i, 1).Value = "" Then でA列が空白の行を判定

指定の値を含む行を削除(例: B列に「削除」という文字がある行を削除)

Option Explicit

Sub DeleteRowsWithKeyword() '標準モジュール
    Dim ws As Worksheet
    Dim i As Long
    Dim keyword As String

    Set ws = ActiveSheet
    keyword = "削除"

    For i = ws.Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
        If ws.Cells(i, 2).Value = keyword Then
            ws.Rows(i).Delete
        End If
    Next i
End Sub

・B列 (Cells(i, 2)) に「削除」と書かれた行を削除
・文字列を削除対象にする場合、変数 keyword に指定すると変更が簡単

ユーザーに削除する行を入力させる

Option Explicit

Sub DeleteRowByUserInput() '標準モジュール
    Dim rowNum As Variant
    
    rowNum = InputBox("削除する行番号を入力してください", "行削除")
    
    If Not IsNumeric(rowNum) Or rowNum < 1 Then
        MsgBox "有効な行番号を入力してください。", vbExclamation, "エラー"
        Exit Sub
    End If
    
    Rows(CLng(rowNum)).Delete
End Sub

・InputBox でユーザーに行番号を入力させる。
・数値以外や0以下の入力を防ぐため、IsNumeric(rowNum) でチェック
・Rows(CLng(rowNum)).Delete で指定の行を削除

Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る

注意点

・削除時はStep -1で後ろから処理する
→ ループで削除する場合、前から削除すると行がずれて誤作動する。

・削除対象を確認してから実行する
→ MsgBox で削除確認を入れると安心。
If MsgBox("本当に削除しますか?", vbYesNo + vbExclamation, "確認") = vbNo Then Exit Sub

・元データを事前にバックアップしておく
→ 誤削除を防ぐために、バックアップを取っておくと安全。

・行全体を削除する場合はEntireRow.Deleteを使う
→ Selection.Delete だとセルのみ削除される可能性があるので、行ごと削除するなら EntireRow.Delete を推奨

 

Excel VBA  行の不要データを自動で削除まとめ

目的 方法
選択した行を削除 Selection.EntireRow.Delete
特定の行(例: 5行目)を削除 Rows(5).Delete
空白行を削除 If ws.Cells(i, 1).Value = "" Then Rows(i).Delete
指定の値を含む行を削除 If ws.Cells(i, 2).Value = "削除" Then Rows(i).Delete
ユーザーが指定した行を削除 InputBox で行番号を取得

行を削除する際は、処理の流れを理解し、誤削除を防ぐ工夫を入れることが大切

 

Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!