엑셀 VBA 영역에서 빈 셀, 행 열 삭제하는 방법

엑셀(Excel)/VBA

엑셀 VBA 영역에서 빈 셀, 행 열 삭제하는 방법

 

환경: Microsoft Excel 2013

 

엑셀에 VBA 코드를 사용하지 않고 빈 셀을 제거하는 방법은 여러가지가 있습니다. 이동 옵션에서 빈 셀을 선택해서 삭제하거나 조건부 서식을 이용하는 등의 방법들이 제공되고 있습니다. 오늘은 VBA 코드로 영역에 빈 셀을 삭제해 보도록 하겠습니다. 또한 빈 셀이 포함된 행 자체를 삭제하는 방법도 다룰 것입니다. 이것은 DB 데이터 정리할 때 유용한 코드입니다.

 

샘플은 다음과 같습니다. B2:C8 영역에 있는 빈 셀을 하나씩 삭제할 것입니다. 그리고 함수를 실행할 버튼도 하나 생성했습니다.

엑셀 VBA 영역에서 빈 셀, 행 열 삭제하는 방법

 

먼저 삭제하고자 하는 영역을 가져와야 합니다. Range 함수를 사용해서 영역을 가져온 후 For Each 문을 사용해서 영역의 값을 하나씩 꺼냅니다. 이해를 돕기 위해 Debug.print 함수를 사용해서 어떤 값들인지 출력해 보았습니다.

 

Dim rng As Range

Dim rCell As Range

 

Set rng = ActiveSheet.Range("B2:C8")

 

For Each rCell In rng.Cells

    Debug.Print rCell.Address, rCell.Value

Next rCell

 

다음은 For Each 안에 빈 셀 여부를 판단하고 삭제하는 소스가 들어가야겠죠. 셀을 삭제하는 함수는 Delete 입니다. rCell 에 든 값이 공백이면 Delete 함수를 수행합니다. 그림은 아래 함수를 실행한 결과 입니다. 제대로 삭제가 되었네요. 하지만 아래 소스는 경우에 따라서 문제가 생길 수 있습니다. 이것은 실시간으로 삭제하는 과정에서 이전 영역이 계속해서 변하기 때문입니다. 그래서 삭제한 데이터를 다른 곳에 복사했다가 다시 원래 자리로 옮기는 방법도 사용합니다.

 

Sub BlankCellDelete()

 

    Dim rng As Range

    Dim rCell As Range

   

    Set rng = ActiveSheet.Range("B2:C8")

   

    For Each rCell In rng.Cells

        If rCell.Value = "" Then

            rCell.Delete

        End If

    Next rCell

   

End Sub

 

엑셀 VBA 영역에서 빈 셀, 행 열 삭제하는 방법

 

이번에는 셀을 삭제하는 소스를 응용해서 빈 셀이 포함된 행 전체를 삭제해 보도록 하겠습니다. 그림처럼 연락처가 없는 데이터 전체를 삭제하고 싶은 경우입니다. 주로 데이터베이스에서 백업 받은 불필요한 데이터를 관리할 때 많이 사용하는 방법입니다. 방법은 간단합니다

엑셀 VBA 영역에서 빈 셀, 행 열 삭제하는 방법

 

셀의 속성 중 행/열 전체를 나타내는 EntireRow/EntireColumn 을 사용하는 것입니다. 이전에 셀을 삭제하던 Delete 대신 행을 삭제할 것이므로 EntireRow.Delete 함수를 넣고 실행합니다.

 

Sub BlankRowDelete()

 

    Dim rng As Range

    Dim rCell As Range

   

    Set rng = ActiveSheet.Range("B4:E13")

   

    For Each rCell In rng.Cells

        If rCell.Value = "" Then

            rCell.EntireRow.Delete

        End If

    Next rCell

   

End Sub

 

엑셀 VBA 영역에서 빈 셀, 행 열 삭제하는 방법

저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군