엑셀 VBA 매크로 이용하여 특정 조건의 데이터를 삭제하는 방법(특정 조건 데이터가 포함 된 행 삭제)

엑셀에서 특정 조건의 데이터가 들어 있는 행을 삭제 모두 삭제하려면 어떻게 하면 될까요?

삭제해야 할 대상 행이 많지 않다면 수작업으로 삭제가 가능하지만 자료의 양이 많을 경우 수작업 삭제하기는 무척 어렵습니다.
뿐만 아니라 수작업을 삭제를 하는 경우 삭제 작업에 대한 오류가 발생할 수도 있습니다.
삭제해야 할 자료를 미처 삭제하지 않거나 삭제하면 안 되는 자료를 삭제하는 등의 수작업 관련 실수가 발생할 수 있기 때문에 가급적 자동으로 삭제하는 방법을 사용해야 합니다.

특정 조건의 데이터만 삭제하는 경우 VBA 프로그램을 이용하면 간단하게 삭제 작업을 처리할 수 있습니다.

이번 글에서는 엑셀 VBA 매크로 이용하여 특정 조건의 데이터를 삭제하는 방법(특정 조건 데이터가 포함 된 행 삭제)에 대해 알아보겠습니다.

엑셀 VBA 매크로를 이용하여 특정 조건의 데이터 삭제 시나리오

▶ 예제에서 설명하는 내용은 [Sheet1]의 사원 목록에서 부서명이 [Sheet2]의 삭제 부서로 정의한 부서에 소속에 사원을 삭제하는 예제입니다.
[Sheet2] 삭제부서에는 “전산부”와 “총무부”가 포함되어져 있습니다.

1. 아래 화면은 VBA 매크로가 실행되기 전의 [Sheet1]과 VBA 프로그램을 실행한 후 “전산부”와 “총무부” 사원이 삭제된 뒤의 [Sheet1] 화면입니다.

엑셀 VBA 매크로 이용하여 특정 조건의 데이터를 삭제하는 방법(특정 조건 데이터가 포함 된 행 삭제)

2. 참고로 [Sheet2]의 삭제부서 정리화면은 아래 화면과 같습니다.

엑셀 VBA 매크로 이용하여 특정 조건의 데이터를 삭제하는 방법

엑셀 VBA 매크로를 이용하여 특정 조건의 데이터가 포함된 행 삭제

▶ 앞 단락에서 설명한 시나리오에 대한 실제 VBA 프로그램 입니다.

1. 만약 VBA 매크로에 대한 설명이 필요한 경우 아래 이전의 포스팅 글을 먼저 참고하시기 바랍니다.

2. VBA(Microsoft Visual Basic for Applications) 편집 화면에서 아래와 같이 코드를 입력합니다.

엑셀 VBA 매크로 이용하여 특정 조건의 데이터를 삭제하는 방법(특정 조건 데이터가 포함 된 행 삭제) - VBA 코드

3. 설명을 붙여 놓은 실제 VBA 코드는 아래와 같습니다.

Sub Delete1()
    
    ‘ 삭제할 특정 데이터를 가져오기 위한 Range 변수
    Dim selectedRange As Range
 
    ‘ 삭제할 대상만 모집할 Range 변수
    Dim deletedRange As Range
    
    Dim i As Long
    Dim rowCount As Long    ‘ 삭제할 대상이 있는 워크시트의 전체 Row 수
    
    ‘ 삭제할 특정 데이터 가져오기 (예제에서는 Sheet2의 A2:A3)    
    Set selectedRange = Sheets(“Sheet2”).Range(“A2:A3”)
    
    ‘ 삭제할 대상이 있는 워크시트의 전체 Row 수 계산(예제에서는 Sheet1의 C열의 수)
    rowCount = Sheets(“Sheet1”).Cells(Rows.Count, “C”).End(xlUp).Row
    
    On Error Resume Next
    
    For i 2 To rowCount        ‘타이틀 행인 1행은 제외하고 2행부터 마지막 행까지 1행씩 반복
        
        For Each sRange In selectedRange    ‘삭제할 특정 데이터를 한건씩 처리
            
            ‘Sheet1의 부서열인 C열의 데이터에 삭제할 특정 데이터가 있는 경우
            If InStr(1, Sheets(“Sheet1”).Cells(i, “C”), sRange) Then
 
                If deletedRange Is Nothing Then        ‘처음 등록
                    Set deletedRange = Sheets(“Sheet1”).Cells(i, “C”).Resize(, 2)
                Else                                ‘추가 등록
                    Set deletedRange = Union(deletedRange, Sheets(“Sheet1”).Cells(i, “C”).Resize(, 2))
                End If
                
                Exit For
            End If
        Next sRange
       
    Next
    On Error GoTo 0
    
    ‘ Sheet1에서 삭제 처리
    deletedRange.EntireRow.Delete
    
End Sub
 
 

4. For i = 2 To rowCount 구문은 For i = rowCount To 2 Step -1 구문으로 대체 사용할 수 있습니다.

5. InStr 함수는 문자열에서 검색할 문자가 있을 경우 해당 위치의 인덱스를 반환하는 함수 입니다.
따라서 특정 데이타의 문자가 포함된 경우 삭제 대상이 됩니다.

6. 만약 부서명(C열)이 정확히 일치할 경우만 삭제 대상으로 할 경우 If Sheets(“Sheet1”).Cells(i, “C”) = sRange Then 구문으로 변경해서 실행하면 됩니다.

마무리

엑셀에서 특정 조건에 해당하는 데이터를 삭제할 때 여기에서 소개한 VBA 코드를 사용하면 쉽고 안정적으로 삭제할 수 있습니다.

수작업으로 삭제를 진행한다고 했을 때 혹시라도 발생할 수 있는 휴먼 에러를 방지하기 위해서도 VBA 매크로를 이용한 삭제 작업을 처리할 것을 권해 드립니다.





이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.

답글 남기기