
이 글은 엑셀의 중복 항목 제거(Remove Duplicates) 기능이 작동하지 않거나 의도한 결과를 내지 못할 때 원인을 체계적으로 규명하고, 데이터를 안전하게 정제하여 분석 신뢰도를 높이는 실무 지침을 제공하기 위함이다.
1. 중복 항목 제거 기능의 기본 동작 원리 이해하다
중복 항목 제거는 선택 범위의 열 조합 키를 비교하여 동일 레코드를 삭제한다. 엑셀은 속도 향상을 위해 해시 테이블 방식으로 비교를 수행하므로 데이터형 불일치, 숨겨진 서식, 수식 결과 동기화가 되지 않으면 서로 다른 값으로 인식하거나 동일 값으로 착각하여 예상과 다른 삭제 결과를 만든다. 기능 자체는 불변이지만 데이터 구조가 복잡해지면 조건이 충족되지 않아 아무 레코드도 제거되지 않거나 과도하게 삭제되는 상황이 발생한다.
2. 선택 범위 문제로 기능이 비활성화되다
중복 제거 버튼이 회색으로 비활성화된다면 테이블 헤더 없이 병합된 셀이 포함되거나 보호 모드·공유 통합 문서 상태일 가능성이 높다. 또한 Ctrl + A로 전체 선택 시 빈 행·열로 인해 실제 데이터 범위가 끊기면 중복 제거 대화 상자에서 열 목록이 비정상적으로 나타난다. 반드시 데이터가 있는 마지막 셀을 확인하고 범위를 재설정해야 한다.
3. 병합 셀·숨겨진 행·필터 상태가 결과를 왜곡하다
병합된 셀을 포함한 범위는 중복 비교가 행 단위로 이루어지지 못하므로 기능이 차단된다. 숨겨진 행·필터로 제외된 행은 기능 적용 시에도 삭제 후보로 평가되므로, 의도치 않은 데이터 유실이 발생한다. 필터를 해제하고 병합을 풀어야 정확한 비교가 가능하다.
4. 숫자·날짜 데이터형 불일치로 중복이 인식되지 않다
2025-06-06과 "2025-06-06"은 시각적으로 동일해 보여도 하나는 날짜형, 하나는 텍스트형이다. 중복 제거는 내부 값의 16진 부동소수 표현을 비교하므로 두 항목을 다른 값으로 인식한다. 다음 표는 대표적 형식 충돌 사례이다.
표시 값 | 실제 데이터형 | 중복 여부 | 대응 방법 |
---|---|---|---|
1,200 | 숫자(쉼표 서식) | 서로 다르다 | VALUE 함수 또는 곱하기 1 |
"1,200" | 텍스트 | ||
2025-06-06 | 날짜 일련번호 | 서로 다르다 | DATEVALUE · TEXT 변환 |
"2025-06-06" | 텍스트 |
5. 수식 결과와 값 간 불일치로 삭제가 누락되다
VLOOKUP, INDEX·MATCH 등으로 생성된 열은 수식 결과만 동일해도 내부적으로 각 셀마다 다른 수식 스트링을 가진다. 중복 제거는 수식이 아닌 결과 값 단위로 비교하지만, 연산 지연 및 캐시 미적용 상태에서는 결과 값이 최신이 아니어서 중복 인식이 실패한다. 대규모 시트에서는 값 붙여넣기 후 기능을 실행하는 것이 안전하다.
6. 구조화된 표(Table)와 범위 오버플로 영향
Excel 표에서 중복 제거를 실행할 때 열 이름을 기준으로 동적으로 열이 추가·삭제된다. 그러나 동적 배열(Spill) 수식이 테이블 하단으로 확장되면 범위가 자동 조정되지 않아 중복 제거가 잘못된 영역에 적용된다. 테이블 외부에서 Remove Duplicates를 실행하거나, Spill 수식을 #
기호로 참조하여 고정해야 한다.
7. 외부 링크·공유 통합 문서·Power Query 캐시 문제
외부 링크를 포함한 시트를 공유 모드로 열면 중복 제거가 비활성화된다. 또한 Power Query로 로드된 테이블은 연결된 테이블로 간주되어 직접 편집이 제한되므로, 연결 끊기 또는 값으로 변환 후 작업해야 한다. 마지막으로 OneDrive·SharePoint 실시간 협업 모드에서는 병합 충돌을 방지하기 위해 기능이 잠시 비활성화되는 경우가 있다.
8. 다단계 진단 체크리스트
- ① 범위에 병합·빈 행·열이 포함되는지 확인하다.
- ② 데이터형(ISNUMBER, ISTEXT)으로 형식 불일치를 검사하다.
- ③ 값 붙여넣기로 수식을 고정한 뒤 중복 제거를 시도하다.
- ④ 필터·숨김 행·열을 모두 표시한 후 기능을 실행하다.
- ⑤ 테이블 구조와 Spill 수식 충돌 여부를 검토하다.
- ⑥ 공유 모드·시트 보호·외부 링크 상태를 해제하다.
- ⑦ Power Query 결과는 복사본 값으로 분리 후 정제하다.
- ⑧ 대용량 데이터는 VBA 또는 SQL로 중복 검출하다.
- ⑨ 실행 전 원본 백업 또는 버전 기록을 확보하다.
9. VBA 및 Power Query로 고급 중복 처리 자동화하다
중복 제거 기능이 제한되거나 조건이 복잡해질 때는 Dictionary 객체를 활용한 VBA 스크립트가 유용하다. 아래 코드는 특정 열 조합(KeyCols 배열)을 비교하여 첫 번째 항목만 남기고 나머지를 삭제한다.
Dim rng As Range, dict As Object, i As Long, key As String
Dim KeyCols As Variant: KeyCols = Array(1, 3, 5) '기준 열
Set rng = ActiveSheet.UsedRange
Set dict = CreateObject("Scripting.Dictionary")
For i = rng.Rows.Count To 2 Step -1
key = ""
For Each c In KeyCols: key = key & ""||"" & rng.Cells(i, c).Text: Next
If dict.Exists(key) Then rng.Rows(i).Delete Else dict.Add key, 1
Next i
End Sub
Power Query에서는 열 병합 → 고급 그룹화 → 열 제거 단계를 통해 다열 기준 중복을 실시간으로 제거할 수 있다. 이는 데이터 새로 고침 시 자동으로 재적용되므로 주기적인 로그 정제 업무에 적합하다.
10. 중복 제거 실패 유형별 사례 비교 표
사례 번호 | 현상 | 원인 | 조치 결과 |
---|---|---|---|
Case-01 | 버튼 비활성화 | 공유 통합 문서 | 공유 해제 후 정상 작동하다. |
Case-02 | 삭제 안됨 | 숫자·텍스트 혼합 | VALUE 변환 후 중복 245건 제거하다. |
Case-03 | 과도 삭제 | 필터 숨김 행 포함 | 필터 해제 후 정확한 37건만 삭제하다. |
Case-04 | 오류 메시지 | 병합 셀 존재 | 병합 해제·센터 Across 적용 후 해결하다. |
Case-05 | 테이블 열 누락 | Spill 수식 범위 충돌 | 열 고정 후 열 목록 정상 표시되다. |
FAQ
- Q1. 중복 제거 시 헤더 행까지 삭제되는 이유는 무엇인가?
- 범위에 헤더 포함 옵션을 체크하지 않았거나, 첫 행이 실제 데이터로 인식되어 열 이름이 자동 생성된 경우이다. 대화 상자에서 ‘데이터에 머리글 행 포함’ 항목을 확인해야 한다.
- Q2. 여러 시트에서 동일 열 기준으로 중복을 한 번에 제거할 수 있는가?
- 기본 기능은 시트 단위이다. Power Query로 시트를 통합하거나 VBA로 루프를 돌려야 한다.
- Q3. 중복 제거 후 삭제된 행을 복구할 방법은?
- Ctrl+Z로 즉시 실행 취소 가능하다. 장기적으로는 버전 기록 및 자동 저장을 활성화하여 복구 지점을 확보한다.
- Q4. 피벗 테이블 소스 데이터를 실시간으로 정제하려면?
- 피벗 소스를 테이블로 만든 후 Power Query 연결을 적용하고, 새로 고침마다 중복 제거 단계가 실행되도록 설정한다.
- Q5. UNIQUE 함수와 중복 제거 기능의 차이는?
- UNIQUE 함수는 동적 배열로 결과를 별도 영역에 반환하며 원본 데이터를 변경하지 않는다. 반면 중복 제거는 원본을 직접 수정한다.
'#2 엑셀 오류 가이드' 카테고리의 다른 글
엑셀에서 데이터 정렬 시 오류 메시지 해결 (0) | 2025.07.06 |
---|---|
엑셀에서 피벗테이블 보고서 레이아웃 고정하기 (0) | 2025.07.05 |
엑셀에서 피벗테이블 계산 필드/항목 추가 방법 (0) | 2025.07.04 |
엑셀에서 여러 시트 데이터 통합 피벗테이블 만드는 방법 (2) | 2025.07.03 |
엑셀에서 피벗테이블 슬라이서가 작동하지 않을 때 (0) | 2025.07.02 |