【ExcelVBA・マクロ】空白行を一瞬で削除するマクロ|大量データでも高速処理【コピペOK】

ExcelVBA

Excelでデータ整理をしていると、次のような悩みはありませんか?

  • 空白行が多くて見づらい
  • 1行ずつ削除するのが面倒
  • 大量データの整理に時間がかかる

このような場合は、VBAで空白行を一括削除するのが最も効率的です。
この記事では、初心者でもすぐ使えるコピペOKのマクロと、実務で使える応用方法まで解説します。


スポンサーリンク
スポンサーリンク

この記事でできること

  • 空白行を一括で削除できる
  • 大量データでも高速処理できる
  • 特定列だけを基準に削除できる
  • エラーを防ぐ書き方が分かる

空白行削除マクロ(コピペOK)

まずは基本コードです。

Option Explicit

Sub DeleteBlankRows()

    Dim lastRow As Long
    Dim i As Long

    ' 最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 下から上に向かって削除
    For i = lastRow To 1 Step -1

        If WorksheetFunction.CountA(Rows(i)) = 0 Then
            Rows(i).Delete
        End If

    Next i

    MsgBox "空白行を削除しました。", vbInformation

End Sub

なぜ「下から削除」するのか?

このコードの重要ポイントはここです。

For i = lastRow To 1 Step -1

上から削除すると、行がズレて正しく処理できません。
そのため、下から削除するのが鉄則です。


コードの意味を解説

① 最終行の取得

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

データの最終行を自動取得しています。

② 空白判定

WorksheetFunction.CountA(Rows(i)) = 0

行にデータが1つもなければ空白と判定します。


応用①:特定の列だけ空白なら削除

例えば「A列が空白なら削除」したい場合はこちらです。

If Cells(i, 1).Value = "" Then
    Rows(i).Delete
End If

この方法は実務でよく使われます。


応用②:高速化バージョン(大量データ向け)

数万行以上ある場合は、画面更新を止めると高速になります。

Application.ScreenUpdating = False

' 処理

Application.ScreenUpdating = True

実務での活用例

  • CSVデータの整形
  • システム出力データの整理
  • 空白行を削除して集計しやすくする

データ処理の前にこのマクロを入れるだけで、作業効率が大きく改善します。


よくあるエラーと対処法

① 最終行が正しく取得できない

列を変更すると解決する場合があります。

Cells(Rows.Count, 2)

② 空白なのに削除されない

スペースが入っている可能性があります。

If Trim(Cells(i, 1).Value) = "" Then

コピペでエラーになる場合の対処法

コードが正しいのにエラーになる場合、次の原因が考えられます。

  • 全角文字が混ざっている
  • 見えない特殊文字がある
  • 記号(= や “”)が壊れている

この場合は、

  1. 該当行を削除
  2. 手入力し直す

だけで解決することがよくあります。


まとめ

  • 空白行はVBAで一括削除できる
  • 下から削除するのが重要
  • CountAで空白判定
  • 実務では特定列判定が便利

空白行削除は非常に頻繁に使う処理です。
このマクロを覚えておくだけで、データ整理の効率が大幅に向上します。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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