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

 

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

 

📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!

👇実務で“そのまま使える”テンプレ付きで、コピペするだけ
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き

 

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 で選択したセルの行を削除。

 

自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。

👉無料ExcelVBAベーシック選択問題138問

 

指定した行を削除する(例: 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 で指定の行を削除

 

注意点

・削除時は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エキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。

👉無料ExcelVBAベーシック選択問題138問