エクセルの空白行を一括で削除する簡単な方法
エクセルでデータを扱う際、空白行が混在すると分析や印刷が煩雑になることがあります。一般的なエクセル機能を使って、空白行を簡単に削除する手順を紹介します。
紙でのデータチェックをしていて、あまりにもデータ数が多かったので、システムからデータをエクスポートしました。しかし、そのデータにはデータ間に空白だらけでした。手作業で削除するのは時間の無駄なので、直ぐにできるこの方法を使いました。VBAでも可能ですが、作業状況によってはエクセルの一般機能で十分対応可能です。
作業前と作業後のデータ例
作業前のデータ例です。赤枠の空白行を削除したい。
作業後
特殊セルを選択する方法で行削除
この方法が一番シンプルです。
空白行を含む列を選択します。
「Ctrl+G」キーを押し、「ジャンプ」ダイアログを開きます。次に、「セルの選択」をクリックし、「空白セル」を選択、「OK」をクリックします。
空白行を選択されている状態で右クリックより、「削除」を選択します。
[ 行全体 ]をクリックし,ます。
連番振りソートで空白行の削除手順
列を挿入し、A列に連番を入力します
この例ではA列ですが、最終列のE列でも問題ありません。
D列の金額でソートします。
ソート後、空白行が下に集まるので、A列に番号が振られている空白行をすべて削除します。
最後に、A列でデータを昇順にソートし直します。
A列が不要であれば削除します。
エクセルのソート機能を活用することで、空白行を迅速に見つけ出して削除することができます。以下は、この方法の詳細とその利点です。
関数を使う方法で行削除
この方法の方が少し手間がかかります。
=COUNTA(A2:C2)=0
この例では、絶対参照($)はなくてもOKです
TRUEで抽出し、行を削除します。
→ 結果
D列は削除します。
参考・マクロ(VBA)
このマクロを実行すると、アクティブシートで1列目に空白の行がある場合、それらの行が削除されます。
Sub DeleteBlankRows()
Dim rng As Range
Dim cell As Range
Dim delRange As Range
Set rng = ActiveSheet.UsedRange
For Each cell In rng.Columns(1).Cells
If Application.WorksheetFunction.CountA(cell.EntireRow) = 0 Then
If delRange Is Nothing Then
Set delRange = cell
Else
Set delRange = Union(delRange, cell)
End If
End If
Next cell
If Not delRange Is Nothing Then
delRange.EntireRow.Delete
End If
End Sub
簡単に説明
- rng:範囲を格納、「ActiveSheet.UsedRange」でアクティブシートの使用されている範囲全体を指定します。
- cell:各セルを処理
- delRange:削除対象の範囲を保持
- For Each ループで、rng.Columns(1).Cells に含まれる各セル(1列目のセル)を順に処理します。
- Application.WorksheetFunction.CountA(cell.EntireRow) は、cell の属する行全体にデータが何個あるかを数えます。CountA 関数は空でないセルの数を返し、もし全てのセルが空であれば 0 を返します。
- もし行全体が空(すべてのセルが空)であれば、そのセルを delRange に追加します。
- Union(delRange, cell) を使用して、削除する行の範囲を拡張していきます。
- もし行全体が空(すべてのセルが空)であれば、そのセルを delRange に追加します。
- Union(delRange, cell) を使用して、削除する行の範囲を拡張していきます。
まとめ
エクセルの基本機能を活用して、空白行を簡単に削除することができます。
VBAの知識がなくても、エクセルの一般機能を使えば十分に対応可能です。エクセルの操作に慣れていない方でも、簡単に実践できるこの方法をぜひ試してみてください。