不要な空行を削除するには
テキストデータをそのままExcelシートに貼り付けて作業をすることがあります。
その場合に無駄な空行を削除したいことがあります。
正規表現が使えるテキストエディタであれば、置換前「^.*\r\n」→置換後「」のように空行を全て一括で削除することも出来ますが、Excelでは標準の機能ではそのようなものはありません。
このように空行を自動で削除するコードが以下になります。
空行削除関数(コード)
以下の関数は選択セルがある列の空行を削除します。選択セルが1列の場合に特化しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Private Sub DeleteBlankLine() Dim s '// セル値 Dim iRow '// 行位置 Dim iCol '// 列位置 Dim iMaxRow '// シートでの最終行 Application.ScreenUpdating = False iRow = ActiveCell.Row iCol = ActiveCell.Column iMaxRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 '// アクティブ列の行をループ Do If (ActiveCell.Row > iMaxRow) Then Exit Do End If s = ActiveCell.Value '// セル値が未設定の場合 If (s = "") Then '// 空行削除 ActiveCell.EntireRow.Delete '// 削除により最終行が上に移動するため値を調整 iMaxRow = iMaxRow - 1 Else '// 次行に選択セルを変更する ActiveCell.Offset(1, 0).Select End If Loop '// 初期選択位置を選択 Cells(iRow, iCol).Select Application.ScreenUpdating = True End Sub |
7行目 | 処理速度を上げるために画面の更新処理を止めています。 |
11行目 | 最終行の位置を取得しています。「VBAで編集セル範囲の選択と最終行と最終列の取得」で詳しく紹介しています。 |
15行目 | 処理中の選択セルが最終行の位置に達した場合はそれ以降は値がないとみなして処理を終了しています。 |
24行目 | アクティブセルの値が空のため削除しています。 |
27行目 | 空行が削除されることにより最終行の位置も1つ上に上がります。そのための調整を行っています。 |
30行目 | 空行ではないため1つ下のセルを選択しなおしています。 |
35行目 | 処理開始時点のセル位置を再度選択しています。これがない場合、データが多い場合に最終行が選択された状態になります。 |
37行目 | 画面の更新処理の停止を解除します。 |
利用方法
この関数は選択している列に対して有効です。その他の列の状態は無視します。
このようにB列とC列に値が設定されている場合に、B列を選択して関数を実行すると、
このようにC列に値が入っていてもB列が空行であればその行を削除します。
削除したい列さえよければそれでよし!という関数です。