Range 개체

RemoveDuplicates 메서드

노만e 2025. 3. 10. 19:35

엑셀 VBA에서 RemoveDuplicates 메서드는 지정한 열에서 중복된 값을 제거하는 기능을 제공합니다.

즉, 데이터에서 고유한 값만 남기고 중복된 항목을 삭제할 때 사용됩니다.


1. 기본 문법

Range("셀범위").RemoveDuplicates Columns:=Array(열번호1, 열번호2, ...), Header:=xlYes 또는 xlNo
  • 셀범위 → 중복 제거를 적용할 범위
  • Columns → 중복 확인할 기준 열 (여러 개 가능)
  • Header → 헤더가 있는 경우 xlYes, 없는 경우 xlNo

📌 Columns:=Array(1,2,3) → 여러 개의 열을 기준으로 중복 검사 가능

📌 Header:=xlYes → 첫 번째 행을 헤더로 간주하여 중복 제거 시 제외

📌 Header:=xlNo → 첫 번째 행을 데이터로 포함하여 중복 제거


2. 단일 열에서 중복 제거

Sub 중복제거_단일열()
Range("A1:A100").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

📌 A1:A100에서 중복된 값을 제거

📌 첫 번째 행(A1)을 헤더로 인식하고 중복 제거


3. 여러 열을 기준으로 중복 제거

Sub 중복제거_여러열()
Range("A1:C100").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub

📌 A, B 열(A1:C100 범위)을 기준으로 중복된 행을 제거

📌 A, B 열 값이 동일하면 중복된 행 삭제 (C열은 비교하지 않음)


4. 헤더가 없는 경우 중복 제거

Sub 중복제거_헤더없음()
Range("A1:A100").RemoveDuplicates Columns:=1, Header:=xlNo
End Sub

📌 A1:A100에서 중복된 값을 제거 (A1도 데이터로 포함)


5. 동적 범위를 설정하여 중복 제거

Sub 동적범위_중복제거()
Dim 마지막행 As Long
마지막행 = Cells(Rows.Count, "A").End(xlUp).Row ' A열의 마지막 데이터 행 찾기
Range("A1:A" & 마지막행).RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

📌 A열에서 데이터가 있는 마지막 행까지 중복 제거

📌 데이터 크기가 변해도 자동으로 적용됨


6. 다른 시트에서 중복 제거

Sub 다른시트_중복제거()
Sheets("Sheet2").Range("B1:B100").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

📌 Sheet2의 B1:B100 범위에서 중복 제거


7. 중복 제거 후 메시지 표시

Sub 중복제거_메시지()
Dim 범위 As Range
Set 범위 = Range("A1:A100")
범위.RemoveDuplicates Columns:=1, Header:=xlYes
MsgBox "중복 제거 완료!", vbInformation
End Sub

📌 중복 제거 후 "중복 제거 완료!" 메시지 표시


8. 중복 제거 후 남은 데이터 개수 출력

Sub 중복제거_개수출력()
Dim 마지막행_전 As Long, 마지막행_후 As Long
마지막행_전 = Cells(Rows.Count, "A").End(xlUp).Row ' 중복 제거 전 개수
Range("A1:A" & 마지막행_전).RemoveDuplicates Columns:=1, Header:=xlYes
마지막행_후 = Cells(Rows.Count, "A").End(xlUp).Row ' 중복 제거 후 개수
MsgBox "중복 제거 완료!" & vbNewLine & _
"변경 전: " & 마지막행_전 & "개" & vbNewLine & _
"변경 후: " & 마지막행_후 & "개", vbInformation
End Sub

📌 중복 제거 전/후 개수를 비교하여 메시지 박스 출력


9. 필터를 적용하여 중복 제거 (고유 값만 남기기)

Sub 필터로_고유값_남기기()
Range("A1:A100").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
End Sub

📌 A1:A100에서 중복된 값을 필터로 숨기고 고유 값만 남김

📌 필터를 해제하려면 ActiveSheet.ShowAllData 사용


10. 고유 값만 새로운 위치에 복사

Sub 고유값_새로운위치_복사()
Range("A1:A100").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True
End Sub

📌 A1:A100의 고유 값을 B1:B100에 복사

📌 원본 데이터는 그대로 유지되고 중복 제거된 데이터가 다른 위치에 저장됨


📝 정리

기능
VBA 코드
단일 열 중복 제거
Range("A1:A100").RemoveDuplicates Columns:=1, Header:=xlYes
여러 열 기준 중복 제거
Range("A1:C100").RemoveDuplicates Columns:=Array(1,2), Header:=xlYes
헤더 없이 중복 제거
Range("A1:A100").RemoveDuplicates Columns:=1, Header:=xlNo
동적 범위에서 중복 제거
Range("A1:A" & 마지막행).RemoveDuplicates Columns:=1, Header:=xlYes
다른 시트에서 중복 제거
Sheets("Sheet2").Range("B1:B100").RemoveDuplicates Columns:=1, Header:=xlYes
중복 제거 후 메시지 표시
MsgBox "중복 제거 완료!"
중복 제거 전후 개수 출력
마지막행_전마지막행_후 비교하여 출력
필터로 고유 값만 표시
Range("A1:A100").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
고유 값만 새로운 위치에 복사
AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True

🔥 VBA의 RemoveDuplicates 메서드를 활용하면 손쉽게 중복을 제거하고 고유 데이터를 유지할 수 있습니다! 🚀