VBA를 사용하여 Excel에서 중복 값 제거하기

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 3월 26, 2023

이 튜토리얼에서는 VBA에서 RemoveDuplicates 메서드를 사용하여 중복을 제거하는 방법을 보여 줍니다.

RemoveDuplicates 메서드

Excel 워크시트로 데이터를 가져오거나 붙여넣을 때 종종 중복된 값이 포함될 수 있습니다. 데이터를 정리하고 중복을 제거해야 하는 경우가 있습니다.

다행히도 VBA의 Range 객체 내에서 이 작업을 수행할 수 있는 간단한 방법이 있습니다.

Range(“A1:C8”).RemoveDuplicates Columns:=1, Header:=xlYes

구문은 아래와 같습니다:

RemoveDuplicates [Columns],[Header]

  • [Columns] – 중복 값을 검사할 열들을 지정합니다. 입력한 모든 열이 일치하면 중복으로 간주됩니다.
  • [Header] – 데이터에 헤더가 있는지 확인합니다. xlNo (기본값), xlYes, xlYesNoGuess

엄밀히 말하면 두 매개변수는 모두 선택 사항입니다. 그러나 Columns 인수를 지정하지 않으면 중복이 제거되지 않습니다.

[Header]의 기본값은 xlNo. 물론 이 인수를 지정하는 것이 더 좋지만 헤더 행이 있는 경우 헤더 행이 중복으로 일치할 가능성은 거의 없습니다.

RemoveDuplicates 사용 참고 사항

  • RemoveDuplicates 메서드를 사용하기 전에 사용할 범위를 지정해야 합니다.
  • RemoveDuplicates 메서드는 원본 행은 유지한 상태에서 중복이 발견된 나머지 행을 제거합니다.
  • RemoveDuplicates 메서드는 행이 아닌 열에서만 작동하지만 VBA 코드를 사용하여 열에서도 작동하도록 할 수 있습니다(이 방법에 대해서는 다음에 살펴보겠습니다).

VBA 예제를 위한 샘플데이터

예제 코드의 작동 방식을 보여주기 위해 다음 샘플 데이터가 사용됩니다:

중복 행 제거하기

이 코드는 A 열의 값만 기준으로 모든 중복 을 제거합니다:

Sub RemoveDupsEx1()
Range(“A1:C8”).RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

“A1:C8” 범위를 정의한 것을 알 수 있습니다. 정의된 범위 대신 UsedRange를 사용할 수 있습니다. UsedRange는 데이터의 마지막 행과 열을 결정하고 해당 전체 범위에 RemoveDuplicates를 적용합니다:

Sub RemoveDups_UsedRange()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

UsedRange는 범위를 명시적으로 정의할 필요가 없어 매우 유용합니다.

코드를 실행하면 다음과 같이 표시됩니다:

A 열(1열)만 지정되었으므로 이전 샘플데이터의 5행에 있던 ‘사과’ 중복이 제거된 것을 알 수 있습니다. 중복행의 수량(2열)은 값이 다르게 되어 있었습니다.

여러 열을 비교하여 중복을 제거하려면 Array 메서드를 사용하여 해당 열들을 지정할 수 있습니다.

여러 열을 비교하여 중복 제거하기

Sub RemoveDups_MultColumns()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlYes
End Sub

배열은 VBA에 1열과 2열(A와 B)을 모두 사용하여 데이터를 비교하도록 지시합니다.

배열내에 정의된 열은 연속된 순서일 필요는 없습니다.

Sub SimpleExample()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYes
End Sub

이 예제에서는 1열과 3열이 중복 비교에 사용됩니다.

이 코드 예제에서는 세 열을 모두 사용하여 중복 여부를 확인합니다:

Sub SimpleExample()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYes
End Sub

Table에서 중복 행 제거하기

RemoveDuplicates를 Excel table 에도 똑같은 방식으로 적용할 수 있습니다. 하지만 구문은 약간 다릅니다.

Sub SimpleExample()
ActiveSheet.ListObjects("Table1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _
Header:=xlYes
End Sub

이렇게 하면 열 1과 3(A와 C)을 기준으로 테이블의 중복 항목이 제거됩니다. 그러나 표의 색상 서식을 정리하지는 않으며 표 하단에 색상이 지정된 빈 행이 남게 됩니다.

배열에서 중복 제거하기

배열에서 중복된 값을 제거해야 하는 경우, 배열을 Excel로 출력하고 RemoveDuplicates 메서드를 사용한 다음 배열을 다시 가져올 수 있습니다.

배열에서 중복을 제거하는 VBA 프로시저는 여기를 참고해 주세요.

VBA를 사용하여 데이터 행에서 중복 제거하기

RemoveDuplicates 메서드는 데이터 열에서만 작동하지만, 창의적인 사고를 통해 데이터 행을 처리하는 VBA 프로시저를 만들 수 있습니다.

워크시트에서 데이터가 다음과 같이 보인다고 가정해 보겠습니다:

B열과 E열에 이전과 동일한 중복이 있지만 RemoveDuplicates 메서드를 사용하여 제거할 수 없습니다.

VBA를 사용하여 추가 워크시트를 만들고, 데이터를 열로 바꾸어 복사한 다음, 중복을 제거한 다음, 다시 행으로 바꾸어 복사하면 데이터 행에 있는 중복을 RemoveDuplicates 메서드를 통해 제거할 수 있습니다.

Sub DuplicatesInRows()
    '화면 업데이트 및 알림 끄기 - 사용자가 현재 실행되고 있는 화면을 보지 않고 코드가 원할하게 실행됩니다.
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '새로운 워크시트를 추가합니다
    Sheets.Add After:=ActiveSheet
    '새로운 워크시트의 이름을 "CopySheet"로 설정합니다.
    ActiveSheet.Name = "CopySheet"
    '원본 워크시트에서 데이터를 복사합니다.
    Sheets("DataInRows").UsedRange.Copy
    '생성된 새 시트를 활성화합니다.
    Sheets("CopySheet").Activate
    '열 기준으로 데이터를 정렬하도록 데이터의 행/열을 바꾸어서 붙여넣습니다.
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
   '1열과 3열에 대한 중복을 제거합니다.
    ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _
        :=xlYes
    '원본시트의 데이터를 삭제합니다.
    Sheets("DataInRows").UsedRange.ClearContents
    '새로운 워크시트의 데이터를 복사합니다.
   Sheets("Copysheet").UsedRange.Copy
   '원본 시트를 활성화합니다.
    Sheets("DataInRows").Activate
    
   '중복이 제거된 데이터의 열과 행을 바꾸어서 붙여넣습니다.
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    'CopySheet를 제거합니다 - 더 이상 필요 없음
    Sheets("Copysheet").Delete
    '원본 시트를 활성화합니다.
    Sheets("DataInRows").Activate
    '화면 업데이트 및 알람을 다시 켭니다.
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

이 코드는 행 단위의 원본 데이터가 ‘DataInRows’라는 워크시트에 있다고 가정합니다.

코드를 실행하면 다음과 같이 표시됩니다:

이제 E 열의 ‘사과’ 중복이 제거되었습니다. 사용자는 불필요한 워크시트 없이 깔끔한 상태로 돌아왔으며, 화면 깜박임이나 경고 메시지 없이 전체 프로세스가 원활하게 완료되었습니다.

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기

AI in the VBA Editor!

AutoMacro is the ultimate VBA add-in.

AI, Generators, UI Builders, Code Library, and More!

Learn More

AutoMacro: AI in the VBA Editor!

Learn More