엑셀 중복값 찾기 방법 4가지 (서식, 함수, 피벗, 매크로 활용)

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

엑셀-중복값-찾기-4가지-방법

엑셀 중복값 찾기 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) 공식 홈페이지에서 확인할 수 있습니다.

▼ 카테고리 다른 글

엑셀 매크로 차단 해제 방법 5가지

엑셀 천단위 절사 방법 3가지 (함수, 셀서식, VBA 매크로)

엑셀 금액 한글 변환 방법 3가지 (함수, VBA 매크로, 셀서식)

댓글 남기기