엑셀 중복값 찾기는 데이터 정리와 정확한 분석을 위해 필수적인 작업입니다. 만약 데이터 속에 숨어있는 중복 데이터를 제대로 찾아내고 제거하지 않는다면, 분석 결과는 쉽게 왜곡될 수 있으며, 이는 곧 보고서의 신뢰도 하락 및 금전적 손실을 초래할 수도 있으므로 각별한 주의가 요구됩니다.

엑셀 중복값 찾기 4가지 방법
엑셀 중복값 찾기의 대표적인 방법으로는 조건부 서식, COUNTIF 함수, 피벗 테이블, VBA 매크로 등이 있으며, 각각의 특성과 장단점이 다릅니다. 사용 목적과 데이터양에 따라 가장 적합한 방법을 선택해 엑셀 중복값을 효율적으로 찾아보세요.
| 방법 | 장점 | 단점 |
|---|---|---|
| 조건부 서식 | 중복값 시각적으로 강조 | 중복 개수 확인 어려움 |
| COUNTIF 함수 | 중복 개수 정량적 확인 가능 | 함수 사용법에 대한 이해 필요 |
| 피벗 테이블 | 데이터 빈도 분석에 최적화 | 피벗 테이블 구조에 익숙해야 함 |
| VBA 매크로 | 대량의 데이터 자동 처리 가능 | 코딩 지식 필요, 초보자에게 복잡 |
엑셀 중복값 찾기 기본: 조건부 서식
엑셀에서 조건부 서식을 활용하면 중복값을 시각적으로 쉽게 확인할 수 있습니다.
1. 데이터 범위 선택
엑셀 시트에서 중복값을 찾고 싶은 데이터 범위를 마우스로 드래그하여 선택합니다.

2. 조건부 서식 선택
상단 메뉴에서 [홈] 탭을 클릭한 후, [조건부 서식] > [셀 강조 규칙] > [중복 값] 순으로 선택합니다.
※ '조건부 서식'에서 '중복 값' 메뉴를 클릭하세요!!!

3. 셀 서식 선택
‘적용할 서식’ 드롭다운 메뉴에서 원하는 강조 서식을 선택한 후, [확인] 버튼을 클릭합니다. 선택한 범위 내 중복값이 지정한 색상으로 강조 표시됩니다.

COUNTIF 함수로 엑셀 중복값 찾기
COUNTIF 함수를 사용하면 중복 개수를 수치로 확인할 수 있습니다.
1. 보조 열 추가
원본 데이터 옆에 중복 여부를 표시할 새로운 열을 추가합니다.

2. COUNTIF 함수 입력
추가한 열의 첫 번째 셀에 COUNTIF 함수 공식을 입력합니다. 특정 영역을 범위로 고정하려면, 절대 참조($)를 사용해야 수식을 복사할 때 참조 범위가 변경되지 않습니다.
| COUNTIF 함수 | 설명 |
|---|---|
| =COUNTIF(범위, 조건) | COUNTIF 함수 기본 구조 |
| =COUNTIF(A:A, A2) | A열 전체에서 A2 값 중복 개수 표시 |
| =COUNTIF($A$2:$A$10, A2) | 범위 지정(절대참조) 중복 개수 표시 |
| =COUNTIFS(A:A,A2,B:B,B2) | 여러 조건 동시에 만족하는 중복값 |
| =COUNTIF(A:A,A2)>1 | TRUE/FALSE 값으로 중복 여부 표시 |
3. 수식 복사
작성한 COUNTIF 함수를 복사해 필요한 범위까지 붙여 넣습니다. 수식에 따라 중복 개수로 값이 표시될 수도 있고, TRUE 또는 FALSE로 중복 여부가 구분될 수도 있습니다.

피벗 테이블로 엑셀 중복값 찾기
피벗 테이블을 활용하면 데이터 요약 정보를 통해 중복값을 쉽게 확인할 수 있습니다.
1. 데이터 범위 선택
중복 여부를 확인할 데이터가 포함된 전체 범위를 마우스로 드래그하여 선택합니다. 이때, 데이터의 제목 행(머리글)까지 포함해 영역을 선택하는 것이 좋습니다.

2. 피벗 테이블 선택
상단 메뉴에서 [삽입] 탭을 클릭한 후, [피벗 테이블] 메뉴를 선택합니다.
키보드 단축키: Alt + N + V 또는 구버전 Alt + D + P

3. 피벗 테이블 위치 설정
피벗 테이블을 생성할 위치를 선택한 후, [확인] 버튼을 클릭합니다. 새로운 시트 또는 현재 작업 중인 시트의 특정 셀 위치를 지정하여 피벗 테이블을 삽입할 수 있습니다.

4. 피벗 테이블 필드 선택
중복 여부를 확인할 열을 ‘행’과 ‘값’ 영역에 추가합니다.
- 행 영역: 중복값을 확인하고 싶은 필드(열 제목)를 마우스로 끌어다 이 영역에 놓습니다.
- 값 영역: 동일한 필드를 다시 한번 끌어다 이 영역에 놓습니다. 기본적으로 ‘개수’로 설정되지만, 만약 다른 계산 방식(합계 등)으로 되어 있다면, 클릭하여 ‘값 필드 설정’에서 ‘개수’로 변경합니다.
※ '값' 필드의 표시 형식을 '개수'로 설정해야 중복값을 확인할 수 있습니다.

5. 중복값 확인
생성된 피벗 테이블의 ‘개수’ 열을 보면 각 항목이 데이터 범위 내에서 몇 번 등장했는지 나타납니다. 이 개수가 ‘2’ 이상인 항목들이 바로 엑셀 중복값에 해당합니다. ‘개수’ 열의 아무 셀이나 선택한 후 마우스 오른쪽 버튼을 클릭하여 [정렬] > [내림차순] (또는 오름차순)을 선택하면 중복 빈도 순서대로 데이터를 정렬하여 볼 수 있습니다.

VBA 매크로 활용 엑셀 중복값 찾기
엑셀에서 중복값 찾기 작업을 자동화하려면, 매크로(VBA)를 사용하는 것이 효과적입니다. 안내된 매크로는 사용자가 선택한 범위 내에서 중복 데이터를 찾는 것은 물론 사용자가 중복 개수 표시, 셀 서식 변경, 데이터 정렬, 그리고 원본 데이터 자동 백업 기능까지 선택 가능합니다.
Sub 중복값_자동찾기_매크로()
Dim rng As Range
Dim ws As Worksheet
Dim backupWs As Worksheet
Dim dict As Object
Dim cell As Range
Dim key As String
Dim isFullMatch As VbMsgBoxResult
Dim showCount As VbMsgBoxResult
Dim changeFormat As VbMsgBoxResult
Dim sortData As VbMsgBoxResult
Dim sortCol As String
Dim sortOrder As VbMsgBoxResult
Dim backupAnswer As VbMsgBoxResult
Dim originalSheetName As String
Dim backupName As String
Dim lastCol As Long
Dim i As Long
Dim nowTime As String
Set ws = ActiveSheet
originalSheetName = ws.Name
' 현재 시간 "MMDDHHmm" 형식 생성 (월일시분)
nowTime = Format(Now, "MMDDHHmm")
' 백업 시트 이름 설정: 원본시트명 + 시간
backupName = originalSheetName & nowTime
' 1. 백업 여부 먼저 질문
backupAnswer = MsgBox("원본 데이터를 백업하시겠습니까?", vbYesNo + vbQuestion, "백업 여부")
If backupAnswer = vbYes Then
' 백업 시트가 이미 있으면 삭제 (중복 방지)
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(backupName).Delete
Application.DisplayAlerts = True
On Error GoTo 0
Set backupWs = Worksheets.Add(After:=Worksheets(Worksheets.Count))
backupWs.Name = backupName
ws.UsedRange.Copy Destination:=backupWs.Range("A1")
MsgBox "백업 시트가 생성되었습니다: '" & backupWs.Name & "'", vbInformation
ws.Activate ' 백업 후 원래 시트로 다시 전환
End If
' 2. 데이터 범위 선택
On Error Resume Next
Set rng = Application.InputBox("중복을 찾을 범위를 선택하세요", "범위 선택", Type:=8)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "선택된 범위가 없습니다.", vbExclamation
Exit Sub
End If
' 3. 여러 열 선택 시 비교 방법 묻기
If rng.Columns.Count > 1 Then
isFullMatch = MsgBox("선택한 열들의 모든 값이 동일해야 중복으로 판단할까요?" & vbCrLf & _
"(아니오 선택 시 첫 번째 열만 기준으로 판단합니다)", vbYesNo + vbQuestion, "중복 기준 선택")
Else
isFullMatch = vbNo ' 단일열이면 기본 첫 열 기준
End If
' 4. 중복 개수 표시 여부
showCount = MsgBox("중복 개수를 표시하시겠습니까?", vbYesNo + vbQuestion, "중복 개수 표시")
' 6. 중복 확인 열 초기화 (중복 개수 표시가 yes일 때만)
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
If showCount = vbYes Then
ws.Cells(1, lastCol + 1).Value = "중복 개수"
End If
Set dict = CreateObject("Scripting.Dictionary")
' 7. 중복 판단 및 처리
For Each cell In rng.Columns(1).Cells
If cell.Row = 1 Then GoTo ContinueLoop ' 헤더 제외
If rng.Columns.Count = 1 Or isFullMatch = vbNo Then
' 단일 열 또는 첫 열 기준
key = Trim(cell.Value)
Else
key = ""
For i = 1 To rng.Columns.Count
key = key & "|" & Trim(cell.Offset(0, i - 1).Value)
Next i
End If
If dict.Exists(key) Then
dict(key) = dict(key) + 1
Else
dict.Add key, 1
End If
ContinueLoop:
Next cell
' 8. 중복 개수 먼저 표시 (서식 적용 전에)
If showCount = vbYes Then
For Each cell In rng.Columns(1).Cells
If cell.Row = 1 Then GoTo NextLoopCount
If rng.Columns.Count = 1 Or isFullMatch = vbNo Then
key = Trim(cell.Value)
Else
key = ""
For i = 1 To rng.Columns.Count
key = key & "|" & Trim(cell.Offset(0, i - 1).Value)
Next i
End If
cell.Offset(0, rng.Columns.Count).Value = dict(key)
NextLoopCount:
Next cell
End If
' 5. 셀 서식 변경 여부 (중복 개수 표시 후 묻기)
If showCount = vbYes Then
changeFormat = MsgBox("중복값에 셀서식을 적용하시겠습니까?" & vbCrLf & _
"(진한 빨강 텍스트 + 연한 빨강 채우기)", vbYesNo + vbQuestion, "서식 적용")
Else
' 중복 개수 미표시 상태라면 바로 묻기
changeFormat = MsgBox("중복값에 셀서식을 적용하시겠습니까?" & vbCrLf & _
"(진한 빨강 텍스트 + 연한 빨강 채우기)", vbYesNo + vbQuestion, "서식 적용")
End If
' 9. 중복 셀 서식 적용
If changeFormat = vbYes Then
For Each cell In rng.Columns(1).Cells
If cell.Row = 1 Then GoTo NextLoopFormat
If rng.Columns.Count = 1 Or isFullMatch = vbNo Then
key = Trim(cell.Value)
Else
key = ""
For i = 1 To rng.Columns.Count
key = key & "|" & Trim(cell.Offset(0, i - 1).Value)
Next i
End If
If dict(key) > 1 Then
If rng.Columns.Count = 1 Or isFullMatch = vbNo Then
cell.Interior.Color = RGB(255, 199, 206)
cell.Font.Color = RGB(156, 0, 6)
Else
For i = 1 To rng.Columns.Count
cell.Offset(0, i - 1).Interior.Color = RGB(255, 199, 206)
cell.Offset(0, i - 1).Font.Color = RGB(156, 0, 6)
Next i
End If
End If
NextLoopFormat:
Next cell
End If
' 10. 정렬 여부
sortData = MsgBox("데이터를 정렬하시겠습니까?", vbYesNo + vbQuestion, "정렬 여부")
If sortData = vbYes Then
sortCol = InputBox("정렬할 열의 이름을 입력하세요 (예: A, B, C...)", "정렬 열 입력")
If sortCol = "" Then Exit Sub
sortOrder = MsgBox("오름차순으로 정렬하시겠습니까?" & vbCrLf & _
"아니오를 선택하면 내림차순으로 정렬됩니다.", vbYesNoCancel + vbQuestion, "정렬 순서")
If sortOrder = vbCancel Then Exit Sub
Dim sortRange As Range
Set sortRange = ws.Range(ws.Cells(rng.Row, 1), ws.Cells(rng.Row + rng.Rows.Count - 1, ws.Cells(rng.Row, ws.Columns.Count).End(xlToLeft).Column))
sortRange.Sort Key1:=ws.Range(sortCol & rng.Row), Order1:=IIf(sortOrder = vbYes, xlAscending, xlDescending), Header:=xlYes
End If
MsgBox "중복값 처리가 완료되었습니다.", vbInformation
End Sub
엑셀 중복값 찾기 주의사항
엑셀 중복값 찾기를 할 때 다음에 유의하세요.
데이터 백업
중복값을 찾기 전에 데이터값이 변경될 수 있으므로, 원본 데이터를 백업하세요. 특히 ‘VBA 매크로 활용 엑셀 중복값 찾기’는 기능 실행 후 이전으로 되돌리기가 어렵기 때문에 원본 백업 후 사용을 권장합니다.
대소문자 구분
엑셀은 기본적으로 대소문자를 구분하지 않기 때문에 ABC와 abc는 동일하게 인식될 수 있습니다.
공백 포함
셀에 공백이 포함되면 다른 값으로 인식되어 중복 값에서 제외될 수 있습니다.
엑셀 중복값 찾기 기능에 대한 보다 자세한 설명과 공식 가이드는 마이크로소프트(Microsoft) 공식 홈페이지에서 확인할 수 있습니다.
▼ 카테고리 다른 글