Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀(Excel) VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때

 

환경: Microsoft Excel 365

 

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

 

▼ 샘플데이터에서 소속이 관리부인 데이터를 삭제하고자 합니다. 데이터가 많은 경우 일일이 삭제하는 것이 비효율적이고 쉽지 않기 때문에 매크로를 만들어 작업 속도를 올려보세요.

엑셀(Excel) VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때

 

▼ 데이터 자동 삭제 매크로를 만들어 보겠습니다. 개발 도구 > 매크로 리본 메뉴를 클릭합니다

엑셀(Excel) VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때

 

▼ 매크로를 실행할 함수를 만들어야 합니다. 매크로 이름에 함수명을 넣고 오른쪽 사이드 메뉴에서 만들기 버튼을 클릭합니다

엑셀(Excel) VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때

 

▼ 함수에 들어가는 전체 소스는 다음과 같습니다.

 

Sub 관리부_삭제()

   

    Dim co As Long, i As Long

    Dim join As String

    Dim buNum As String

    Dim deleteRow As Integer

 

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

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

 

    Cells(3, "B").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

 

 

 

▼ 핵심 소스만 간략하게 설명하겠습니다. 특정 조건에 맞는 리스트를 삭제하기 위해 현재 추가된 전체 행 개수를 알아야 합니다. CurrentRegion 는 좌측 최상단에서 연속된 셀의 데이터 전체를 가져옵니다. CurrentRegion 를 이용해 행의 개수를 알아옵니다. 속성값은 Row count 입니다. 이 값으로 For 문을 돌립니다.

 

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

 

다음은 검색할 데이터 시작 지점을 지정해야 합니다.

 

Cells(3, "B").Select

 

위에서 선택된 영역을 가져와 Offset 을 이용해 소속 셀의 값을 알아 옵니다.

 

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

 

삭제할 셀의 비교 값으로 동일한지 여부를 판단하고 Selection.EntireRow.Delete 로 행 전체를 삭제합니다.

 

If join = "관리부" Then

     Selection.EntireRow.Delete

     co = co - 1

 

▼ 함수의 소스 작성이 끝났다면 매크로를 돌려 데이터를 삭제해 보겠습니다. 매크로 창에서 실행할 이름을 선택하고 오른쪽에 실행 버튼을 클릭합니다

엑셀(Excel) VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때

 

▼ 매크로 실행 결과는 다음과 같습니다. “관리부데이터가 모두 삭제되었습니다

엑셀(Excel) VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때



Posted by 녹두장군

댓글을 달아 주세요

  1. 사하라 2016.05.13 16:31  댓글주소  수정/삭제  댓글쓰기

    co = co - 1 대신 i = i + 1 써도 되는지요? 이런 방법이 좀 더 익숙해서 질문 드립니다.

    • Favicon of https://mainia.tistory.com 녹두장군 2016.05.13 18:17 신고  댓글주소  수정/삭제

      i 는 for 문에서 자동 증가하는 값입니다. i + 1 을 하지 않아도 값은 한번 돌 때마다 늘어납니다. 소스는 정답이 없습니다. 자신만의 스타일이 있기 때문에 결과만 제대로 나온다면 상관없습니다.

  2. 안녕하세요 2018.12.25 23:51  댓글주소  수정/삭제  댓글쓰기

    삭제되는 단어리스트를 "경리부" + 여러개를 같이 해주려고 합니다. 이럴 경우

    Cells(2, "A").Select
    For i = 0 To co
    join = Selection.Offset(0, 0) '소속셀값
    buNum = Selection.Offset(0, 1) '부서번호셀값

    For n = 0 To 5

    If join = Worksheets(2).Cells(n, 1).Value Then
    Selection.EntireRow.Delete
    co = co - 1
    deleteRow = deleteRow + 1
    Else
    Selection.Offset(1, 0).Select
    End If
    Next n
    Next i

    이렇게 짜봤는데 에러가 나더라구요. join = Worksheets(2).Cells(n, 1).Value Then 이줄이 문제가
    되는데....
    포문으로 시트2에 있는 A1~A5 까지의 단어리스트를 포함하는 행을 삭제해주려고 하는데
    제 코드에서 어디가 문제가 됐는지 좀 알려주실 수 있으신가요?

  3. 초보 2019.02.07 13:07  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 근데 deleteRow+1 은 어디에 쓰이는 건가요. 이 코드에서 쓰임새를 못 찾겠네요ㅜㅜ

  4. 초보2 2020.05.25 10:37  댓글주소  수정/삭제  댓글쓰기

    예제 그대로 해보고있는데
    join = Selection.Offset(0,0)'소속셀값
    이줄이 메서드 오류라고 뜨는데 왜그러는걸까요 ? ㅠ
    중단모드에서는 코드를 실행할 수 없다고 뜨네요