誰かから受け取ったExcelファイルを業務で使おうとしたとき、整理が必要なことはよくあります。
空白セルを削除するのは、そんな代表的な整理作業の一つです。
単純な1列のリストになっていればいいのに、データベース的な発想のない方が作ったExcelファイルだと、時々空白のセルが入っていたりします。
範囲選択しておいて並べ替えを行うことで、データの入っているセルだけを集めることもできますが、似たような作業が頻発すると、結構面倒です。
そんなときに便利なマクロをVBA(Visual Basic for Applications)で作成しましたので、ご紹介しておきます。
アクティブセルから下の空白セルをすべて削除するサンプルマクロ
アクティブなセルから下にある空白セルをすべて削除して、データの入っているセルを上に詰めるマクロです。
Dim msg As String
Dim col_num As Long
Dim row_num As Long
Dim row_end As Long
Dim i As Long
msg = "アクティブセルから下の空白セルをすべて削除しますか?"
If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
col_num = ActiveCell.Column
row_num = ActiveCell.Row
row_end = Cells(Rows.Count, col_num).End(xlUp).Row
For i = row_end To row_num Step -1If Len(Cells(i, col_num).Value) = 0 Then
Cells(i, col_num).Delete xlShiftUp
End If
Next i
End Sub
サンプルマクロの解説
まず、アクティブセルの列番号と行番号と、
col_num = ActiveCell.Column
row_num = ActiveCell.Row
アクティブセルのデータの入っている最終行番号を、
row_end = Cells(Rows.Count, col_num).End(xlUp).Row
それぞれ変数に格納しています。
Cells(Rows.Count, 列番号).End(xlUp).Row
というのは、データの入っている最終行番号を取得するExcel VBAで定番の書き方です。
その、一番下のセルからアクティブなセルに向かって上方向にループ処理を開始して
For i = row_end To row_num Step -1
もしデータが入力されていなければ、
If Len(Cells(i, col_num).Value) = 0 Then
セルを削除して上方向に詰めています。
Cells(i, col_num).Delete xlShiftUp
上記のマクロは、アクティブセルから下にある空白セルを削除していますが、アクティブな列の全空白セルを削除するのなら、
For i = row_end To row_num Step -1
の部分を
For i = row_end To 1 Step -1
とすればOKです。
Home » Excel VBA Rangeオブジェクト » Endプロパティ » 空白セルを削除するExcelマクロ