- 최초 작성일: 2002-07-16
- 최종 수정일: 2026-09-29
- 조회수: 28 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 순위 구하기 응용
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
지난 시간에 불연속 영역에 대한 순위 구하기에 대해 살펴보았습니다(X0275 강좌 참고). 기왕 순위 구하기에 대해 얘기가 나온 김에 조금 더 살펴보도록 하지요. 이번에는 동점자 처리에 대한 이야기입니다.
순위 구하기 응용
핵심 요약: RANK·COUNTIF로 동점자에게도 다른 순위 부여하기
RANK 함수는 같은 점수에 동일한 순위를 매기는 문제가 있습니다. COUNTIF 함수를 조합하면 먼저 나온 데이터에 우선 순위를 주어 동점자에게도 서로 다른 순위를 매길 수 있습니다.
- 일반 RANK: 동점자는 같은 순위를 받고, 다음 순위는 건너뜁니다.
- RANK+COUNTIF 응용: 먼저 나온 데이터에 우선 순위를 주어 동점자를 구분합니다.
- 오름차순 응용: RANK의 order 인수와 COUNT 함수를 조합해 반대 방향 순위도 구할 수 있습니다.
[표 1] 일반적으로 순위를 구하고자 할 때 아래와 같이 RANK 함수를 사용하게 됩니다. 물론 RANK 함수 말고도 COUNTIF 함수나 배열 수식을 사용해도 동일한 결과를 얻을 수 있습니다.
| Data | Rank1 | Rank2 | Rank3 |
|---|---|---|---|
| 80 | =RANK(B14,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B14)+1 | =SUM(N(B14<$B$14:$B$23))+1 |
| 70 | =RANK(B15,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B15)+1 | =SUM(N(B15<$B$14:$B$23))+1 |
| 30 | =RANK(B16,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B16)+1 | =SUM(N(B16<$B$14:$B$23))+1 |
| 80 | =RANK(B17,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B17)+1 | =SUM(N(B17<$B$14:$B$23))+1 |
| 60 | =RANK(B18,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B18)+1 | =SUM(N(B18<$B$14:$B$23))+1 |
| 50 | =RANK(B19,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B19)+1 | =SUM(N(B19<$B$14:$B$23))+1 |
| 70 | =RANK(B20,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B20)+1 | =SUM(N(B20<$B$14:$B$23))+1 |
| 40 | =RANK(B21,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B21)+1 | =SUM(N(B21<$B$14:$B$23))+1 |
| 60 | =RANK(B22,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B22)+1 | =SUM(N(B22<$B$14:$B$23))+1 |
| 60 | =RANK(B23,$B$14:$B$23) | =COUNTIF($B$14:$B$23,">"&B23)+1 | =SUM(N(B23<$B$14:$B$23))+1 |
세 가지 방식의 수식을 정리하면 다음과 같습니다.
| Rank1 | =RANK(B14,$B$14:$B$23) |
| Rank2 | =COUNTIF($B$14:$B$23,">"&B14)+1 |
| Rank3 | {=SUM(N(B14<$B$14:$B$23))+1} |
그런데 RANK 함수는 같은 점수가 있을 경우 동일한 순위를 매긴다는 문제가 있습니다(위의 표에서 Rank1 부분의 굵게 표시한 순위를 보세요). 물론 이 문제는 COUNTIF 함수를 사용하든, 배열 수식을 사용하든 여전히 남게 됩니다.
이제 아래의 [표 2]를 보세요. 동일한 점수에 대해서도 순위가 서로 다르게 매겨져 있지요?
| Data | Rank4 |
|---|---|
| 80 | =RANK(B43,$B$43:$B$52)+COUNTIF($B$43:B43,B43)-1 |
| 70 | =RANK(B44,$B$43:$B$52)+COUNTIF($B$43:B44,B44)-1 |
| 30 | =RANK(B45,$B$43:$B$52)+COUNTIF($B$43:B45,B45)-1 |
| 80 | =RANK(B46,$B$43:$B$52)+COUNTIF($B$43:B46,B46)-1 |
| 60 | =RANK(B47,$B$43:$B$52)+COUNTIF($B$43:B47,B47)-1 |
| 50 | =RANK(B48,$B$43:$B$52)+COUNTIF($B$43:B48,B48)-1 |
| 70 | =RANK(B49,$B$43:$B$52)+COUNTIF($B$43:B49,B49)-1 |
| 40 | =RANK(B50,$B$43:$B$52)+COUNTIF($B$43:B50,B50)-1 |
| 60 | =RANK(B51,$B$43:$B$52)+COUNTIF($B$43:B51,B51)-1 |
| 60 | =RANK(B52,$B$43:$B$52)+COUNTIF($B$43:B52,B52)-1 |
C43 셀에는 이런 수식이 들어 있습니다.
Rank4 =RANK(B43,$B$43:$B$52)+COUNTIF($B$43:B43,B43)-1
우리가 아주 잘 알고 있는 RANK 함수와 COUNTIF 함수를 사용하였습니다. 다만 COUNTIF 함수에서 range 부분, 즉 조건을 검색할 셀 범위를 지정해 준 부분을 유심히 살펴보세요. 절대 주소를 사용하여 범위가 가변적으로 변동이 되도록 해 주었습니다.
그런데 맨 끝에 -1을 해 준 것은 무엇 때문일까요? 그것은 순위를 계산할 때 자기 자신을 계산에서 빼주기 위함입니다. (동점자 처리에 대한 부분은 X0137 강좌를 참고하시기 바랍니다)
위의 [표 1]과 [표 2]에서는 오름차순으로 순위를 구하였습니다. 이번에는 반대의 경우를 살펴볼까요?
| Data | Rank5 | Rank6 |
|---|---|---|
| 80 | =RANK(B73,$B$73:$B$82,1) | =COUNT($B$73:$B$82)-(RANK(B73,$B$73:$B$82)+COUNTIF($B$73:B73,B73)-2) |
| (이하 동일한 패턴으로 B82 행까지 이어집니다) | ||
오름차순으로 동일한 점수에 대해 순위를 다르게 매기는 방법은 조금 더 까다로와 보입니다. 아래와 같은 수식이 사용되었습니다.
Rank5 =COUNT($B$73:$B$82)-(RANK(B73,$B$73:$B$82)+COUNTIF($B$73:B73,B73)-2)
내림차순으로 순위를 구할 때와 마찬가지로 생소한 함수는 전혀 사용되지 않았습니다. 하지만 초보님들은 이해하기 쉽지만은 않지요? 대체로 복잡한 수식의 경우 맨 안쪽부터 분석해 나오면 이해가 빠릅니다만, 이 수식은 맨 앞쪽부터 세 도막으로 나누어 잘 살펴보세요.
힌트를 좀 드리자면, 어떤 학급에 10명의 학생이 있는데 나만 등수를 모르고 다른 학생들은 모두 자신의 등수를 알고 있다고 가정합니다. 이런 상황에서 나의 등수를 알아내려면 어떻게 해야 할까요? 반 전체 인원을 알고 있으니 나보다 등수가 높은(우수한) 사람들의 수를 빼고, 다시 나와 같은 등수를 가진 사람의 수를 빼버리면 되겠지요? 그러면 뒤에 -2를 빼 준 것은 왜일까요? 그것은 숙제랍니다. 위의 Rank4에서 사용한 방법과 크게 다르지 않습니다.
정리 — 동점자 순위 처리 수식 비교
| 구분 | 수식 |
|---|---|
| 내림차순, 동점자 동일 순위 | =RANK(B14,$B$14:$B$23) |
| 내림차순, 동점자 구분 | =RANK(B43,$B$43:$B$52)+COUNTIF($B$43:B43,B43)-1 |
| 오름차순, 동점자 구분 | =COUNT($B$73:$B$82)-(RANK(B73,$B$73:$B$82)+COUNTIF($B$73:B73,B73)-2) |
자주 묻는 질문 (FAQ)
Q1. RANK 함수는 동점자를 어떻게 처리하나요?
RANK 함수는 값이 같은 데이터에는 모두 같은 순위를 부여합니다. 예를 들어 2등이 두 명이면 둘 다 2등으로 표시되고, 그 다음 순위는 3등이 아니라 4등으로 건너뜁니다.
Q2. 동점자에게도 서로 다른 순위를 매기려면 어떻게 하나요?
=RANK(B43,$B$43:$B$52)+COUNTIF($B$43:B43,B43)-1 처럼 RANK 결과에 COUNTIF로 구한 '자기 자신까지의 동일 값 개수'를 더하고 1을 빼주면, 먼저 나온 데이터일수록 더 높은(작은 숫자의) 순위를 갖도록 동점자를 구분할 수 있습니다.
Q3. 오름차순으로 순위를 구할 때는 수식이 어떻게 달라지나요?
RANK 함수의 세 번째 인수(order)를 1로 지정하면 오름차순 순위를 구합니다. 동점자를 구분해야 할 때는 =COUNT(전체범위)-(RANK(셀,범위)+COUNTIF(범위처음:현재셀,현재셀)-2) 형태의 수식을 사용해 내림차순 계산 결과를 거꾸로 뒤집어 줍니다.
마치며
RANK 함수 하나만으로는 동점자를 구분할 수 없지만, COUNTIF와 조합하면 실무에서 자주 필요한 '동점자 구분 순위'를 손쉽게 구현할 수 있습니다. 오름차순·내림차순에 따라 수식 구조가 달라지는 점에 유의하며 직접 실습해 보시기 바랍니다.