見出し画像

【ファイル付き】コピペで使えるExcelマクロ!選択した列の空白行を自動で削除するマクロ

Excelで作業をしていると、途中でできた空白行に気づかずに誤った集計をしてしまうことがあります。そんなときに便利なのが、空白行だけを一括で削除するマクロです。本記事では初心者向けに、選択した列の空白行を削除するマクロの概要から実際の使い方まで、やさしく解説します。

Excelマクロの基本的な使い方は、下の記事を参考にしてください


1. マクロの概要

  1. ボタンをクリックする

  2. 入力フォームが開くので「どの列の空白行を削除するか」シート上の列を選択する

  3. 空白のセルが含まれる行を削除する

このようにボタンを押して、好きな列を選択するだけで空白のセルが含まれる行を削除することが出来ます。特にExcel業務が多い方にとって、データ整理を一発で行えるのは便利です。

以下がマクロのイメージ画像です


ボタンをクリックする
入力フォームが開くので、好きな列(どの行でも可)を選択する
空白行が削除される

2. コードの説明

以下が実際に使用するコードです。
コードをどうやって貼り付けて使用していいかわからない方は、この記事の上部に、Excelマクロの基本操作の記事のリンクを貼っているためそちらを参照してください。

Option Explicit

Public Sub RemoveBlankRowsInSelectedColumn()
    Dim targetRange As Range
    Dim selectedColumn As Long
    Dim lastRow As Long
    Dim dataArray As Variant
    Dim blankRows() As Long
    Dim blankCount As Long
    Dim rowIndex As Long
    
    '--- ユーザーに列を選択してもらう入力フォーム(InputBox)を表示
    On Error Resume Next
    Set targetRange = Application.InputBox( _
        Prompt:="空白行をチェックする列を選択してください", _
        Title:="列の選択", _
        Type:=8)
    On Error GoTo 0
    
    ' キャンセルされた、または無効な範囲が選択された場合は終了
    If targetRange Is Nothing Then
        MsgBox "処理をキャンセルしました。", vbExclamation
        Exit Sub
    End If
    
    ' 列の特定(複数列選択の可能性があるため先頭列に限定)
    selectedColumn = targetRange.Columns(1).Column
    
    '--- 対象列の最終行を取得
    lastRow = Cells(Rows.Count, selectedColumn).End(xlUp).Row
    If lastRow < 1 Then
        MsgBox "有効なデータがありません。", vbExclamation
        Exit Sub
    End If
    
    '--- 対象列の値を配列に格納
    dataArray = Range(Cells(1, selectedColumn), Cells(lastRow, selectedColumn)).Value
    
    '--- 削除対象となる行番号を溜める配列を初期化
    ReDim blankRows(1 To 1) As Long
    blankCount = 0
    
    Dim currentValue As Variant
    Dim rowMax As Long
    rowMax = UBound(dataArray, 1)
    
    Dim i As Long
    For i = 1 To rowMax
        currentValue = dataArray(i, 1)
        
        '--- 空白セルかどうかを判定
        If IsEmpty(currentValue) Or Trim(currentValue) = "" Then
            blankCount = blankCount + 1
            If blankCount > UBound(blankRows) Then
                ReDim Preserve blankRows(1 To blankCount)
            End If
            blankRows(blankCount) = i
        End If
    Next i
    
    '--- 空白行を下から削除
    If blankCount > 0 Then
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        
        For i = blankCount To 1 Step -1
            rowIndex = blankRows(i)
            Rows(rowIndex).Delete
        Next i
        
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
        
        MsgBox "空白行の削除が完了しました。空白行数: " & blankCount, vbInformation
    Else
        MsgBox "空白行はありませんでした。", vbInformation
    End If
End Sub

3. 使い方

  1. VBE(Visual Basic Editor)を開く

    • Excelを開き、キーボードの「Alt + F11」キーでVBEを起動します。

  2. 新しいモジュールを挿入

    • メニューの「挿入」→「標準モジュール」を選択し、そこに先ほどのコードを貼り付けます。

  3. マクロを実行

    • Excelに戻り、「開発」タブの「マクロ」をクリックして「RemoveBlankRowsInSelectedColumn」を選択 → 「実行」をクリックします。

    • すると「空白行をチェックする列を選択してください」というダイアログが表示されるので、削除したい列をドラッグして選択します。

  4. 削除完了

    • 空白行があれば削除が行われ、「空白行の削除が完了しました。」とメッセージが表示されます。空白行がなければ「空白行はありませんでした。」が表示されます。

4. ファイルの配布

実際のファイルも置いておきます。これをダウンロードして使用することも可能です。

5. まとめ

本記事では、選択した列の空白行を一括削除するマクロを紹介しました。マクロを活用すれば、膨大なデータの中から空白行を見つけて手動で削除する手間が大幅に減ります。初心者でも実装しやすいシンプルなコードですので、まずはサンプルファイルを作って実行してみることをおすすめします。ぜひ、日々のExcel作業に役立ててみてください。

この記事で紹介したマクロをさらにカスタマイズしたい場合や、エラーが発生する場合は、お気軽にコメントをお寄せください!

※本記事で紹介しているマクロやファイルの使用に伴い発生したいかなるトラブルや損害についても、当方では一切の責任を負いかねます。すべて自己責任のもとでご利用ください。

いいなと思ったら応援しよう!