【ファイル付き】コピペで使えるExcelマクロ!選択した列の空白行を自動で削除するマクロ
Excelで作業をしていると、途中でできた空白行に気づかずに誤った集計をしてしまうことがあります。そんなときに便利なのが、空白行だけを一括で削除するマクロです。本記事では初心者向けに、選択した列の空白行を削除するマクロの概要から実際の使い方まで、やさしく解説します。
Excelマクロの基本的な使い方は、下の記事を参考にしてください
1. マクロの概要
ボタンをクリックする
入力フォームが開くので「どの列の空白行を削除するか」シート上の列を選択する
空白のセルが含まれる行を削除する
このようにボタンを押して、好きな列を選択するだけで空白のセルが含まれる行を削除することが出来ます。特に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. 使い方
VBE(Visual Basic Editor)を開く
Excelを開き、キーボードの「Alt + F11」キーでVBEを起動します。
新しいモジュールを挿入
メニューの「挿入」→「標準モジュール」を選択し、そこに先ほどのコードを貼り付けます。
マクロを実行
Excelに戻り、「開発」タブの「マクロ」をクリックして「RemoveBlankRowsInSelectedColumn」を選択 → 「実行」をクリックします。
すると「空白行をチェックする列を選択してください」というダイアログが表示されるので、削除したい列をドラッグして選択します。
削除完了
空白行があれば削除が行われ、「空白行の削除が完了しました。」とメッセージが表示されます。空白行がなければ「空白行はありませんでした。」が表示されます。
4. ファイルの配布
実際のファイルも置いておきます。これをダウンロードして使用することも可能です。
5. まとめ
本記事では、選択した列の空白行を一括削除するマクロを紹介しました。マクロを活用すれば、膨大なデータの中から空白行を見つけて手動で削除する手間が大幅に減ります。初心者でも実装しやすいシンプルなコードですので、まずはサンプルファイルを作って実行してみることをおすすめします。ぜひ、日々のExcel作業に役立ててみてください。
この記事で紹介したマクロをさらにカスタマイズしたい場合や、エラーが発生する場合は、お気軽にコメントをお寄せください!
※本記事で紹介しているマクロやファイルの使用に伴い発生したいかなるトラブルや損害についても、当方では一切の責任を負いかねます。すべて自己責任のもとでご利用ください。