【VBA】空白の行・列を削除する

エクセルVBAで使うコードの備忘録。VBAでワークシート上の指定範囲から、空白の行・列を全て削除するコード。

スポンサーリンク

空白の行を削除する

まず、指定された行が空白かどうかを判定する方法ですが、Endメソッドを利用するのが手っ取り早いです(Endメソッドについては、開始行・列、最終行・列を取得する方法に関するこちらの記事をご参照ください)。

まず指定された行の一番右端からEndメソッドを使って左側に検索をかけます。途中に値が入っているセルがあれば、のセルが取得されるので、Columnプロパティで取得できる列番号が1よりも大きな値になります。途中に値がなければ一番左端のセルが取得されるので、Columnプロパティが1になります。ただ、一番左端のセルにのみ値が入っている場合でも、Endメソッドで取得できるセルは一番左になってしまうので、一番左端のセルが取得された場合にはそのセルの入力内容が空かどうかの確認が必要になります(ちなみに行全体を削除するコードについてはこちらで詳しく説明しています)。

なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

空白の行を削除する

Public Sub DeleteEmptyRow()
    
    '--- ワークシートオブジェクトを設定 ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("[ワークシート名]")
    
    '--- 削除対象の行番号 ---'
    Dim rowIndex As Long
    rowIndex = [行番号]
    
    '--- 値の入っているセルを検索 ---'
    Dim colIndex As String
    colIndex = ws.Cells(rowIndex, Columns.Count).End(xlToLeft).Column
    
    '--- 検索結果のセルが一番左かつ値がなければ削除 ---'
    If (colIndex = 1 And IsEmpty(ws.Cells(rowIndex, 1).Value)) Then
        
        Rows(rowIndex).Delete
        
    End If
    
End Sub

空白の列を削除する

空白の列を削除する際の考え方も基本的には行を削除する考え方と同じです。

指定された列が空かどうかを判定する方法ですが、Endメソッドを利用するのが手っ取り早いです(Endメソッドについては、開始行・列、最終行・列を取得する方法に関するこちらの記事をご参照ください)。

まず指定された列の一番下端からEndメソッドを使って上側に検索をかけます。途中に値が入っているセルがあればそのセルが取得されるので、Rowプロパティで取得できる行番号が1よりも大きな値になります。途中に値がなければ一番上端のセルが取得されるので、Rowプロパティが1になります。ただ、一番上端のセルにのみ値が入っている場合でも、Endメソッドで取得できるセルは一番上になってしまうので、一番上端のセルが取得された場合にはそのセルの入力内容が空かどうかの確認が必要になります(ちなみに列全体を削除するコードについてはこちらで詳しく説明しています)。

空白の列を削除する

Public Sub DeleteEmptyColumn()
    
    '--- ワークシートオブジェクトを設定 ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("[ワークシート名]")
    
    '--- 削除対象の列番号 ---'
    Dim colIndex As Long
    colIndex = [列番号]
    
    '--- 値の入っているセルを検索 ---'
    Dim rowIndex As String
    rowIndex = ws.Cells(Rows.Count, colIndex).End(xlUp).Row
    
    '--- 検索結果のセルが一番上かつ値がなければ削除 ---'
    If (rowIndex = 1 And IsEmpty(ws.Cells(1, colIndex).Value)) Then
        
        Columns(colIndex).Delete
        
    End If
    
End Sub