Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 중복 데이터 재귀 호출과 반복문 사용해서 삭제하기

엑셀(Excel)/VBA
반응형

VBA 에서도 재귀 호출을 사용해야 원활하게 문제를 해결할 수 있는 경우가 종종 있습니다. 그 예가 오늘 샘플로 소개할 중복 데이터 삭제 입니다. C, C++, Java 등을 다뤄 보신 분들은 한번쯤 경험이 있을 겁니다. 만약 처음 접하시는 분들이 있다고 하더라도 예제를 통해서 꼭 자기 것으로 만들어야 합니다. VBA 에서 어떻게 재귀 호출을 구현하는지 알아 보도록 하겠습니다.

 

재귀 호출이란 자기 자신을 호출한다는 말입니다. 그러니까 함수 안에 자기 자신의 함수를 호출하도록 코드를 구성하는 것이죠. 만약 종료 시점이 없다면 무한 루프에 빠지겠죠. 그래서 사람들이 재귀 호출을 이해하는데 힘들어 합니다.

 

 

대부분 재귀 호출은 동일한 코드를 계속해서 반복해야 하는 경우 적용합니다. 그림에 나와 있는 샘플처럼 중복 데이터를 삭제하려고 할 때 처음 찾은 중복 데이터를 삭제하고 또 있는지 다시 뒤지는 작업을 계속해서 반복해야 합니다. 이 때 동일한 코드를 반복해야 하기 때문에 재귀 호출을 하는 것입니다. 모든 중복 데이터를 찾아 삭제하고 나면 재귀 호출은 끝나게 됩니다.

엑셀 VBA 중복 데이터 재귀 호출과 반복문 사용해서 삭제하는 방법

 

아래 소스는 이중 For 문을 사용해서 동일한 값이 있을 때 삭제하는 내용입니다. 만약 데이터를 삭제하고 재귀 호출을 하지 않으면 어떻게 될까요? 첫 번째 찾은 데이터만 삭제하고 또 다른 중복 데이터는 삭제하지 못하겠죠.

Dim rng As Range
Dim i As Integer
Dim j As Integer
 
Set rng = ActiveSheet.Range("B2").CurrentRegion
 
For i = 2 To rng.Count
    For j = i + 1 To rng.Count
        If rng.Cells(j).Value = rng.Cells(i).Value Then
            rng.Cells(j).Delete
          End If
    Next j
Next i

 

 

재귀 호출을 하는 방법은 “Call 중복데이터_제거 입니다. 기존 함수 호출과 동일한 구조입니다. 단지 Call 뒤에 나오는 함수명이 자기 자신이라는 것만 다릅니다. 전체 소스는 다음과 같습니다.

Sub 중복데이터_제거()
 
    Dim rng As Range
    Dim i As Integer
    Dim j As Integer
   
    Set rng = ActiveSheet.Range("B2").CurrentRegion
   
    For i = 2 To rng.Count
        For j = i + 1 To rng.Count
            If rng.Cells(j).Value = rng.Cells(i).Value Then
                rng.Cells(j).Delete
                Call 중복데이터_제거
            End If
        Next j
    Next i
   
End Sub

 

엑셀 VBA 중복 데이터 재귀 호출과 반복문 사용해서 삭제하는 방법

아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 반복문 For Next 사용하기
엑셀 VBA 반복문 For Next, For Each Next 사용하기
엑셀 VBA 반복문 Do While 사용하기
엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하기
셀 VBA On Error GoTo 반복문에서 에러 거르기
반응형
Posted by 녹두장군

댓글을 달아 주세요