엑셀(Excel) VBA - 특정 조건의 데이터를 삭제하고자 할 때

엑셀(Excel)/VBA

엑셀(Excel) VBA - 특정 조건의 데이터를 삭제하고자 할 때

 

환경 : Microsoft Excel 2010

 

엑셀시트의 자료에서 특정행을 삭제하는데 수작업으로 가능하지만 양이 많을때는 VBA 코드를 짜서 편리하게 이용할수 있습니다. 아래 예제는 특정조건에 맞는 데이터가 셀에 포함되어 있을 때 행 전체를 삭제하는 샘플입니다.

 

그림에서 처럼 경리부의 데이터를 삭제할려고 합니다. DB 에서 데이터를 덤프뜬다던지 하게되면 엑셀로 포팅하는 경우가 많은데 이때 데이터를 걸러내야 하는 경우가 있습니다.

 

엑셀(Excel) VBA - 특정 조건의 데이터를 삭제하고자 할 때

 

경리부삭제 매크로 버튼을 하나 만들었습니다. 클릭하면 소스가 실행되게 하기 위함입니다.

엑셀(Excel) VBA - 특정 조건의 데이터를 삭제하고자 할 때

 

특정 조건에 맞는 리스트를 삭제하기 위해 현재 active 되어 있는 셀의 전체 행 개수를 알아야 합니다. CurrentRegion 은 좌측 최상단에서 연속된 셀의 끝까지 영역을 선택할수 있고, 개수를 셀수 있습니다추가할 시트에 Row count 를 알아옵니다

 

co = ActiveSheet.Range("A4").CurrentRegion.Rows.Count

 

위에서 Active 시킨 셀 위치부터 행의 숫자 만큼 For 문을 돌립니다. 그리고 For 문안에 경리부일 때 데이터를 삭제하는 소스가 들어가게 됩니다. Selection.EntireRow.Delete 행전체를 삭제 하게 되는 것이죠.

 

Sub Delete_Click()

    Dim co As Long, i As Long

    Dim join As String

    Dim buNum As String

    Dim deleteRow As Integer

 

    '추가할 시트에 Row count 를 알아옵니다

    co = ActiveSheet.Range("A4").CurrentRegion.Rows.Count

   

    Cells(4, "A").Select

    For i = 0 To co

        join = Selection.Offset(0, 0) ‘ 소속셀값

        buNum = Selection.Offset(0, 1) ‘ 부서번호셀값

        If join = "경리부" Then

            Selection.EntireRow.Delete

            co = co - 1

            deleteRow = deleteRow + 1

        Else

            Selection.Offset(1, 0).Select

        End If

    Next

   

End Sub

 

소스를 넣고 실행해서 경리부에 해당하는 모든 데이터를 날렸습니다. 공백이 있는 데이터를 날리고 싶다던지? 부정확한 데이터가 있다면 소스를 조금 수정해서 이용하시면 됩니다.

 

엑셀(Excel) VBA - 특정 조건의 데이터를 삭제하고자 할 때

 

Posted by 녹두장군