- 최초 작성일: 2002-05-17
- 최종 수정일: 2026-09-29
- 조회수: 35 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 순위별 가산점 부여하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
영업사원이나 학생처럼 여러 사람을 성적순으로 줄 세운 뒤, 등수 구간에 따라 차등 점수(가산점)를 매겨야 하는 경우가 종종 있습니다. 10명 단위로 규칙적으로 나눌 수도 있고, 상위 3명은 20점, 그다음 6명은 15점처럼 인원수가 들쭉날쭉한 구간으로 나눠야 할 수도 있습니다. 독자 한 분이 보내주신 질문을 바탕으로 두 가지 방법을 모두 살펴보겠습니다.
순위별 가산점 부여하기
핵심 요약
RANK와 ROUNDUP을 조합하면 10명 단위로 규칙적인 가산점을, INDEX와 MATCH를 조합하면 인원수가 불규칙한 구간별 가산점을 부여할 수 있습니다.
- =ROUNDUP(RANK(순위,범위,1)/10,0)으로 10명 단위 가산점을 계산합니다.
- RANK의 Order 인수를 1로 지정해 내림차순 순위를 구합니다.
- 불규칙한 구간은 참조 테이블 + INDEX/MATCH로 해결합니다.
질문 하나
100명의 영업사원을 평가하려고 합니다. 판매목표대비 판매실적으로 달성율을 만들고 그 달성율로 상위 10명 -> 10점, 그하위 10명 -> 9점, ……… 마지막 하위 10명은 1점을 부여하려고 합니다. 어떤 함수를 쓰는지 부탁드립니다.
자주 들러서 좋은 답변을 주시는 드래곤볼님께서 아래와 같이 답변을 주셨네요. ^^
>1위점수로 내림차순 정렬한뒤, >=roundup(rank(셀,범위)/10,0) 해보세요. >정렬에 유의하시길.
이 방법을 약간 수정해 보았습니다. 일단 예제 테이블을 하나 만들고…
예제 파일을 내려받으려면 여기를 클릭하세요.
| 번호 | 점수 | 순위 | 가산점 |
| 1 | 254.2 | =RANK(B24,$B$24:$B$123) | =ROUNDUP(RANK(B24,$B$24:$B$123,1)/10,0) |
| 2 | 990.9 | =RANK(B25,$B$24:$B$123) | =ROUNDUP(RANK(B25,$B$24:$B$123,1)/10,0) |
| 3 | 650.6 | =RANK(B26,$B$24:$B$123) | =ROUNDUP(RANK(B26,$B$24:$B$123,1)/10,0) |
| 4 | 766.2 | =RANK(B27,$B$24:$B$123) | =ROUNDUP(RANK(B27,$B$24:$B$123,1)/10,0) |
| 5 | 304.4 | =RANK(B28,$B$24:$B$123) | =ROUNDUP(RANK(B28,$B$24:$B$123,1)/10,0) |
| 6 | 456.3 | =RANK(B29,$B$24:$B$123) | =ROUNDUP(RANK(B29,$B$24:$B$123,1)/10,0) |
| 7 | 714.3 | =RANK(B30,$B$24:$B$123) | =ROUNDUP(RANK(B30,$B$24:$B$123,1)/10,0) |
| 8 | 508.4 | =RANK(B31,$B$24:$B$123) | =ROUNDUP(RANK(B31,$B$24:$B$123,1)/10,0) |
| 9 | 342.9 | =RANK(B32,$B$24:$B$123) | =ROUNDUP(RANK(B32,$B$24:$B$123,1)/10,0) |
이 테이블에서 '순위' 필드는 없어도 되지만 시각적으로 확인해 보시라는 의미에서 일부러 집어 넣은 것입니다. 가산점 부분에는 이런 수식이 들어있습니다.
=ROUNDUP(RANK(B24,$B$24:$B$123,1)/10,0)
대개의 분들이 다 알고 있는 ROUNDUP 함수와 RANK 함수를 사용하였군요. ^^
(1) RANK 함수를 사용하여 순위를 먼저 구하고…(이 때 Order 인수값을 1로 하여 내림차순으로 순위를 구한 점에 유의!)
(2) 그런 다음, 10등씩 내려가면서 점수를 차등 적용하므로 10으로 나누어 줍니다. 간단하지요?
그런데 가산점을 부여할 때 10명씩 규칙적으로 구분되는 것이 아니라 불규칙하게 점수를 부여한다면 어떻게 해야 할까요?
예제 파일을 내려받으려면 여기를 클릭하세요.
| 번호 | 점수 | 순위 | 가산점 | 비고 |
| 1 | 655.9 | =RANK(B145,$B$145:$B$174) | =INDEX($B$179:$B$182,MATCH(C145,$A$179:$A$182,-1)) | |
| 2 | 507.0 | =RANK(B146,$B$145:$B$174) | =INDEX($B$179:$B$182,MATCH(C146,$A$179:$A$182,-1)) | 최상위 3명에게는 20점 |
| 3 | 828.1 | =RANK(B147,$B$145:$B$174) | =INDEX($B$179:$B$182,MATCH(C147,$A$179:$A$182,-1)) | 그다음 6명에게는 15점 |
| 4 | 291.4 | =RANK(B148,$B$145:$B$174) | =INDEX($B$179:$B$182,MATCH(C148,$A$179:$A$182,-1)) | 또 그다음 9명에게는 9점 |
| 5 | 998.9 | =RANK(B149,$B$145:$B$174) | =INDEX($B$179:$B$182,MATCH(C149,$A$179:$A$182,-1)) | 나머지 사람들에 대해서는 5점 |
(1) 가산점 부여의 기준이 되는 테이블을 만듭니다.
| 인원수 | 가산점 |
| 30 | 5 |
| 9 | 9 |
| 6 | 15 |
| 3 | 20 |
(2) 이제는 널리(?) 알려진 INDEX와 MATCH 함수를 중첩하여 수식을 작성합니다.
=INDEX($B$179:$B$182,MATCH(C145,$A$179:$A$182,-1))
참조 테이블을 하나 만들어야 한다는 것이 약간 번거롭기는 하지만 두번째 방법이 좀더 융통성이 있는 방법이라고 할 수 있을 것입니다.
정리 — 규칙적/불규칙적 가산점 부여 방법
| 구간 방식 | 사용 함수 | 수식 예 |
|---|---|---|
| 10명 단위 규칙적 | RANK + ROUNDUP | =ROUNDUP(RANK(B24,$B$24:$B$123,1)/10,0) |
| 인원수 불규칙 | RANK + INDEX + MATCH | =INDEX($B$179:$B$182,MATCH(C145,$A$179:$A$182,-1)) |
자주 묻는 질문 (FAQ)
Q1. 10명씩 규칙적으로 가산점을 매기려면 어떤 수식을 쓰나요?
=ROUNDUP(RANK(B24,$B$24:$B$123,1)/10,0) 수식을 사용합니다. RANK 함수로 내림차순 순위를 구한 뒤 10으로 나누고 ROUNDUP으로 올림 처리하면, 1~10등은 1점, 11~20등은 2점처럼 10명 단위로 점수가 차등 적용됩니다.
Q2. RANK 함수에서 Order 인수를 1로 지정하는 이유는 무엇인가요?
Order 인수를 1로 지정하면 값이 큰 순서(내림차순)로 순위를 매기게 됩니다. 점수가 높을수록 좋은 등수(1등)가 되도록 하기 위해 이 예제에서는 Order를 1로 설정한 점에 유의해야 합니다.
Q3. 인원수가 불규칙한 구간별로 가산점을 부여하려면 어떻게 하나요?
가산점 부여 기준이 되는 참조 테이블(인원수, 점수)을 별도로 만든 다음, =INDEX($B$179:$B$182,MATCH(C145,$A$179:$A$182,-1)) 처럼 INDEX와 MATCH 함수를 중첩해서 사용합니다. 참조 테이블을 만드는 번거로움은 있지만 10명 단위가 아닌 임의의 구간에도 자유롭게 적용할 수 있습니다.
마치며
RANK 함수를 기본으로, 구간이 규칙적이면 ROUNDUP을, 구간이 불규칙하면 INDEX·MATCH 참조 테이블을 조합하면 어떤 형태의 등수별 가산점 체계도 수식 하나로 자동화할 수 있습니다.