고객 명단 5,000줄에서 실제 고객이 몇 명인지 세야 한다면, 가장 먼저 무엇을 해야 할까? 그냥 행 개수를 세면 안 된다. 같은 고객이 여러 번 주문했다면 이름이 여러 번 반복해서 나타날 것이기 때문이다. 이럴 때 필요한 것이 '중복 제거'이고, 엑셀에서는 UNIQUE 함수가 이 역할을 맡는다. 그런데 "중복을 제거한다"는 이 작업은, 사실 수학에서 아주 오래전부터 다뤄온 집합(set)이라는 개념과 정확히 같은 일이다.
집합이라는 개념부터 다시 떠올려보기
수학에서 집합은 "같은 원소가 두 번 들어갈 수 없는 모음"으로 정의된다. {사과, 사과, 바나나}라는 목록이 있어도, 이것을 집합으로 표현하면 {사과, 바나나}가 된다. 중복된 사과는 한 번만 존재하는 것으로 취급되기 때문이다. 엑셀의 고객 명단도 똑같다. "홍길동"이라는 이름이 열 번 등장하든 한 번 등장하든, 집합의 관점에서는 "홍길동"이라는 원소 하나로 취급되어야 실제 고객 수를 정확히 셀 수 있다.
UNIQUE의 동작 원리
=UNIQUE(A2:A5000)이 수식은 A2:A5000 범위를 위에서부터 훑으면서, 처음 등장하는 값은 결과에 포함시키고 이미 한 번 나온 값과 같은 값이 다시 나타나면 결과에서 제외하는 방식으로 동작한다. 결과는 스필로 펼쳐지므로, 원본 범위에 몇 개의 고유값이 있는지 미리 알 필요 없이 있는 그대로 결과가 아래로 채워진다. 실제 고객 수가 필요하다면 이 결과를 COUNTA로 한 번 더 감싸면 된다.
=COUNTA(UNIQUE(A2:A5000))UNIQUE와 COUNTIF, 같은 문제를 푸는 두 가지 접근
UNIQUE가 등장하기 전에는 중복 여부를 확인할 때 주로 COUNTIF를 사용했다.
=COUNTIF(A:A,A2)>1— A2와 같은 값이 A열에 2개 이상 있는지 '판정'만 해준다. 목록 자체를 만들어주지는 않는다.=UNIQUE(A2:A5000)— 중복을 제거한 목록 자체를 새로 만들어서 보여준다.
즉 COUNTIF는 "이 값이 중복인가?"라는 질문에 참/거짓으로 답하는 함수였고, UNIQUE는 그 질문의 결과를 활용해 아예 중복 없는 새 목록을 만들어내는 함수다. 목적이 '판정'이냐 '생성'이냐에 따라 선택이 달라진다고 볼 수 있다.
중복 제거 방식의 옵션 — 완전히 겹치는 것만, 아니면 한 번이라도 나온 것만
UNIQUE에는 두 번째, 세 번째 인수가 있어 세밀한 조정이 가능하다. UNIQUE(범위, FALSE, TRUE)처럼 세 번째 인수를 TRUE로 주면, 범위 안에서 딱 한 번만 등장한 값만 걸러낼 수도 있다. 이는 "정확히 한 번 주문한 신규 고객만 찾고 싶다"는 것처럼, 단순 중복 제거와는 다른 질문에 답할 때 유용하다.
자주 하는 실수
- 대소문자나 공백 차이를 다른 값으로 인식하지 못하는 경우: "홍길동"과 "홍길동 "(끝에 공백)은 사람 눈에는 같아 보여도 UNIQUE는 서로 다른 값으로 취급해 둘 다 결과에 남긴다. TRIM 함수로 먼저 정리해두는 것이 안전하다.
- 여러 열을 동시에 넣었을 때의 기준을 착각하는 경우:
UNIQUE(A2:B100)처럼 두 열을 함께 넣으면, 두 열의 조합 전체가 같아야 중복으로 판단한다. 한 열만 기준으로 삼고 싶다면 그 열만 따로 참조해야 한다.
Q. UNIQUE 결과의 순서는 어떻게 정해지나요?
기본적으로 원본 범위에 처음 등장한 순서 그대로 나열된다. 정렬된 순서가 필요하면 SORT(UNIQUE(...))처럼 SORT로 한 번 더 감싸면 된다.
마무리
UNIQUE 함수를 "중복을 없애주는 신기한 기능"으로만 기억하기보다, "목록을 집합으로 재구성하는 함수"라고 이해해두면 다른 상황에서도 이 개념을 응용하기 쉬워진다. 다음 글에서는 이렇게 정리된 데이터를 원하는 기준으로 줄 세우는 SORT와 SORTBY가, 정렬 대상과 정렬 기준을 분리해서 생각한다는 것이 왜 유용한지 살펴본다.