엑셀 RANK 함수와 RANK.EQ 사용법 — 순위 매기기·동점 처리·조건별 순위
RANK와 RANK.EQ 형식은 어떻게 되나?
두 함수 모두 인수 3개를 같은 순서로 받습니다. 순위(rank)는 목록을 정렬했을 때 그 값이 놓이는 자리입니다.
| 인수 | 필수 여부 | 넣는 값 |
|---|---|---|
| number | 필수 | 순위를 알고 싶은 값(보통 한 칸) |
| ref | 필수 | 비교할 숫자 목록의 범위. 숫자가 아닌 값은 무시됩니다 |
| order | 생략 가능 | 생략 또는 0이면 내림차순(큰 값이 1위), 0이 아닌 값이면 오름차순(작은 값이 1위) |
Microsoft 지원의 RANK.EQ 문서 기준입니다. RANK.EQ는 Excel 2016 이후 및 Microsoft 365 문서에 올라 있습니다. 인수 구분자는 쉼표(,)로 쓰며, 지역 설정에 따라 세미콜론(;)을 쓰는 환경이면 구분자만 바꿔 입력합니다.
이 글은 아래 예제 표 A1:D9 하나로 끝까지 설명합니다. D열(순위)에 수식을 넣습니다.
| 행 | A열 이름 | B열 부서 | C열 점수 | D열 순위 |
|---|---|---|---|---|
| 1 | 이름 | 부서 | 점수 | 순위 |
| 2 | 김민수 | 영업 | 85 | |
| 3 | 이서준 | 영업 | 92 | |
| 4 | 박지우 | 개발 | 78 | |
| 5 | 최유나 | 개발 | 92 | |
| 6 | 정하늘 | 영업 | 85 | |
| 7 | 한도윤 | 개발 | 88 | |
| 8 | 오세아 | 영업 | 70 | |
| 9 | 윤지호 | 개발 | 78 |
점수 92, 85, 78이 각각 두 번씩 나오도록 만든 예제입니다. 동점 처리를 비교하기 위한 값입니다.
점수 순위를 매기는 기본 수식은?
D2에 아래 수식을 넣고 D9까지 채우면 점수가 높은 사람이 1위가 됩니다. 비교 범위는 $C$2:$C$9처럼 절대 참조($)로 고정해야 아래로 복사해도 범위가 밀리지 않습니다.
=RANK.EQ(C2,$C$2:$C$9)
낮은 값이 1위여야 하는 경우(달리기 기록, 불량 건수 등)에는 세 번째 인수에 1을 넣습니다.
=RANK.EQ(C2,$C$2:$C$9,1)
| 이름 | 점수 | 내림차순 =RANK.EQ(C2,$C$2:$C$9) | 오름차순 =RANK.EQ(C2,$C$2:$C$9,1) |
|---|---|---|---|
| 김민수 | 85 | 4 | 4 |
| 이서준 | 92 | 1 | 7 |
| 박지우 | 78 | 6 | 2 |
| 최유나 | 92 | 1 | 7 |
| 정하늘 | 85 | 4 | 4 |
| 한도윤 | 88 | 3 | 6 |
| 오세아 | 70 | 8 | 1 |
| 윤지호 | 78 | 6 | 2 |
검산: 점수를 큰 순서로 늘어놓으면 92, 92, 88, 85, 85, 78, 78, 70입니다. 92는 1위, 88은 3위, 85는 4위, 78은 6위, 70은 8위입니다. 작은 순서(70, 78, 78, 85, 85, 88, 92, 92)로는 70이 1위, 78은 2위, 85는 4위, 88은 6위, 92는 7위입니다.
정렬하지 않아도 순위를 구할 수 있습니다. 원래 행 순서를 그대로 둔 채 순위 열만 추가하는 방식입니다.
동점이면 순위가 어떻게 되나?
RANK.EQ는 동점인 값에 같은 순위(그 묶음의 가장 높은 순위)를 주고, 그 다음 순위는 건너뜁니다. Microsoft 문서의 설명대로 숫자 10이 두 번 나와 5위라면 그 다음 값 11은 7위가 되고 6위는 없습니다. 예제에서 92가 둘이라 1위가 두 명이고 2위는 없이 3위(88점)로 넘어갑니다.
동점을 평균 순위로 처리하고 싶다면 방법이 두 가지입니다.
방법 1. RANK.AVG 사용
RANK.AVG는 인수 구성이 RANK.EQ와 같고, 동점에 평균 순위를 돌려주는 함수입니다. 예를 들어 5, 7, 7, 10을 순위로 매기면 RANK.EQ는 1, 2, 2, 4이고 RANK.AVG는 1, 2.5, 2.5, 4입니다(Wikipedia 설명 기준).
=RANK.AVG(C2,$C$2:$C$9)
방법 2. RANK.EQ에 보정값 더하기
Microsoft 문서는 RANK.EQ 결과에 아래 보정값을 더하면 동점 평균 순위를 얻는다고 안내합니다.
=RANK.EQ(C2,$C$2:$C$9)+(COUNT($C$2:$C$9)+1-RANK.EQ(C2,$C$2:$C$9,0)-RANK.EQ(C2,$C$2:$C$9,1))/2
| 점수 | 내림차순 순위 | 오름차순 순위 | 보정값 (8+1−내림−오름)÷2 | 평균 순위 |
|---|---|---|---|---|
| 92 | 1 | 7 | 0.5 | 1.5 |
| 88 | 3 | 6 | 0 | 3 |
| 85 | 4 | 4 | 0.5 | 4.5 |
| 78 | 6 | 2 | 0.5 | 6.5 |
| 70 | 8 | 1 | 0 | 8 |
값이 한 번만 나오면 보정값은 0이라 순위가 그대로입니다. 위 값은 예제 C2:C9(숫자 8개) 기준입니다.
동점 없이 1위부터 차례로 매기려면?
동점이어도 위쪽 행에 먼저 순위를 주려면 RANK.EQ에 COUNTIF로 앞쪽의 같은 값 개수를 더합니다. 시상 순위처럼 겹치면 안 되는 순위표에 쓰는 방식이며, 어느 행이 앞서는지는 표의 행 순서가 정합니다.
=RANK.EQ(C2,$C$2:$C$9)+COUNTIF($C$2:C2,C2)-1
COUNTIF의 범위 $C$2:C2는 시작만 고정하고 끝은 한 칸씩 늘어납니다. 같은 값이 지금 행까지 몇 번째 나왔는지 세는 역할입니다. COUNTIF 자체는 COUNTIF·COUNTIFS 사용법에서 따로 정리했습니다.
| 이름 | 점수 | RANK.EQ | 앞쪽 같은 값 개수−1 (COUNTIF−1) | 최종 순위 |
|---|---|---|---|---|
| 김민수 | 85 | 4 | 0 | 4 |
| 이서준 | 92 | 1 | 0 | 1 |
| 박지우 | 78 | 6 | 0 | 6 |
| 최유나 | 92 | 1 | 1 | 2 |
| 정하늘 | 85 | 4 | 1 | 5 |
| 한도윤 | 88 | 3 | 0 | 3 |
| 오세아 | 70 | 8 | 0 | 8 |
| 윤지호 | 78 | 6 | 1 | 7 |
결과는 1~8이 한 번씩 나옵니다. 점수가 같을 때 다른 기준(예: 보너스 점수)으로 가리려면 COUNTIFS로 그 기준 조건을 더하는 방식을 쓰면 되지만, 기준 열을 따로 정해야 합니다.
부서별 등 조건별 순위는 어떻게 구하나?
RANK.EQ에는 조건 인수가 없으므로, COUNTIFS로 같은 부서 안에서 나보다 점수가 높은 사람 수를 센 뒤 1을 더합니다. 내 위에 몇 명이 있는지가 곧 내 순위가 된다는 원리입니다.
=COUNTIFS($B$2:$B$9,B2,$C$2:$C$9,">"&C2)+1
| 인수 | 의미 |
|---|---|
| $B$2:$B$9, B2 | 부서가 내 부서(B2)와 같은 행만 대상으로 합니다 |
| $C$2:$C$9, ">"&C2 | 점수가 내 점수(C2)보다 큰 행만 셉니다 |
| +1 | 나보다 높은 사람 수에 나 자신을 더해 순위로 만듭니다 |
| 이름 | 부서 | 점수 | 같은 부서에서 더 높은 점수 수 | 부서 내 순위 |
|---|---|---|---|---|
| 김민수 | 영업 | 85 | 1 | 2 |
| 이서준 | 영업 | 92 | 0 | 1 |
| 박지우 | 개발 | 78 | 2 | 3 |
| 최유나 | 개발 | 92 | 0 | 1 |
| 정하늘 | 영업 | 85 | 1 | 2 |
| 한도윤 | 개발 | 88 | 1 | 2 |
| 오세아 | 영업 | 70 | 3 | 4 |
| 윤지호 | 개발 | 78 | 2 | 3 |
영업은 92, 85, 85, 70이라 순위가 1, 2, 2, 4이고 개발은 92, 88, 78, 78이라 1, 2, 3, 3입니다. 동점이면 같은 순위를 주고 다음을 건너뛰는 RANK.EQ와 같은 방식입니다. 낮은 값이 1위가 되도록 하려면 ">"를 "<"로 바꿉니다.
조건이 하나 더 늘어도 COUNTIFS에 조건 범위와 조건 쌍을 추가하면 됩니다. 비교하는 값이 소수 계산 결과라면 ROUND·ROUNDUP·ROUNDDOWN으로 자릿수를 정리한 뒤 순위를 구하는 편이 안전합니다. 화면에는 같아 보여도 실제 값이 다르면 동점으로 처리되지 않기 때문입니다.
RANK와 RANK.EQ 중 무엇을 써야 하나?
새 문서에서는 RANK.EQ를 쓰고, 이미 RANK가 들어 있는 파일은 그대로 두어도 같은 결과가 나옵니다. RANK는 이전 버전과의 호환을 위해 남아 있는 함수이며, 동점을 같은 순위로 처리하는 방식은 RANK.EQ와 같습니다.
| 함수 | 동점 처리 | 비고 |
|---|---|---|
| RANK | 같은 순위(가장 높은 순위), 다음 순위 건너뜀 | 호환용으로 남아 있는 함수 |
| RANK.EQ | 같은 순위(가장 높은 순위), 다음 순위 건너뜀 | Excel 2016 이후, Microsoft 365 문서에 올라 있음 |
| RANK.AVG | 평균 순위 | 인수 구성은 RANK.EQ와 동일 |
RANK.AVG와 RANK의 세부 사항은 이번에 확인한 Microsoft 문서에 직접 나와 있지 않아 보조 자료를 참고했습니다. 사용 전에 해당 Microsoft 지원 페이지에서 한 번 더 확인하길 권합니다.
순위가 이상하거나 오류가 날 때는?
대부분은 비교 범위를 고정하지 않았거나, 숫자가 텍스트로 저장되어 있거나, 실제 값이 달라서 생깁니다. 아래 순서대로 확인합니다.
| 증상 | 원인 | 확인 방법 |
|---|---|---|
| 아래 칸으로 갈수록 순위가 엉뚱하거나 #N/A가 나옴 | 범위에 $가 없어 복사할 때 범위가 한 칸씩 밀림 | D3 수식에서 범위가 C3:C10처럼 바뀌었는지 확인하고 $C$2:$C$9로 고정 |
| 일부 값이 순위에서 빠진 듯 보임 | 텍스트로 저장된 숫자는 숫자가 아닌 값이라 범위에서 무시됨 | 칸이 왼쪽 정렬이거나 초록 삼각형이 있는지 확인하고 숫자로 변환 |
| 순위가 1, 2, 2, 4로 나옴 | 오류가 아니라 동점 처리 규칙 | 이 글의 동점 처리 방법(RANK.AVG, 보정값, COUNTIF 가산) 중 선택 |
| 똑같아 보이는데 순위가 다름 | 표시 형식으로 소수를 가렸을 뿐 실제 값이 다름 | 칸을 눌러 수식 입력줄의 실제 값을 확인하고 ROUND로 자릿수 통일 |
| 순서가 거꾸로임(높은 점수가 꼴찌) | order 인수가 0이 아닌 값으로 들어감 | 세 번째 인수를 지우거나 0으로 바꿈 |
| #N/A | 순위를 구할 값이 범위 안에 없음 | number가 ref 범위에 포함된 칸인지 확인 |
오류를 단순히 숨기려고 IFERROR를 씌우면 범위가 밀린 문제까지 감춰질 수 있습니다. 원인을 먼저 확인한 뒤 사용합니다(IFERROR 함수 사용법 참고). 이 글의 수식은 모두 예제 표 A1:D9로 직접 검산한 값이며, 실제 파일에서는 범위를 자신의 데이터에 맞게 바꿔야 합니다.