- 최초 작성일: 2002-07-11
- 최종 수정일: 2026-09-29
- 조회수: 22 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 불연속 영역의 순위구하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 강좌에서는 한 개의 연속된 영역이 아니라, 서로 떨어져 있는 여러 영역 전체를 대상으로 순위를 구하는 방법을 살펴봅니다. RANK 함수에 여러 영역을 어떻게 넘겨줄 수 있는지가 핵심입니다.
불연속 영역의 순위구하기
핵심 요약: RANK 함수로 불연속 영역의 순위 구하기
RANK 함수는 하나의 연속된 영역에 대해서는 문제없이 순위를 구할 수 있지만, A1:A10, A15:A20처럼 서로 떨어진 여러 영역을 한꺼번에 대상으로 지정하려면 괄호로 묶어주는 요령이 필요합니다.
- 연속 영역: =RANK(B49,$B$49:$B$58) 처럼 일반적인 방식으로 구합니다.
- 불연속 영역: 콤마로 나열하면 오류가 나며, 괄호로 한 번 더 묶어야 합니다.
- 수식: =RANK(B59,($B$59:$B$68,$D$59:$D$68,$F$59:$F$68))
안녕하세요, 질문 하나가 들어왔습니다. RANK 함수를 쓰는데 그 범위가 A1~A10, A15~A20, A23~A30, 이런 식으로 범위가 여러 개일 땐 어떻게 하면 되는지, '&'를 써서 하니깐 수식이 틀렸다고 나온다는 질문이었습니다. 그리고 C1 셀에 =RANK(B1,A1:A10)이라고 해 놓고, 순위 10 미만은 나타나지 않게 하려고 =IF(C1>11,"",RANK(B1,A1:A10))이라고 하니 순환 참조 오류가 난다는 질문도 함께였습니다.
아래와 같은 자료가 있다고 가정합니다. 이 상태에서 각 데이터의 순위를 구하는 것은 전혀 문제가 될 것이 없습니다. RANK 함수가 있다는 사실만 알고 있다면 말이지요.
| Data | Rank |
|---|---|
=INT(RAND()*100) | =RANK(B49,$B$49:$B$58) |
| (이하 동일한 패턴으로 B58 행까지 이어집니다) | |
참고로 불연속 영역의 순위를 구하는 수식 예시는 다음과 같습니다.
=RANK(B22,B22:B31)
그런데 데이터 형태가 아래와 같다면 문제는 좀 달라집니다. 예를 들어,
=RANK(B37,B37:B46,D37:D46,F37:F46
이런 수식을 사용하면 아마 "인수가 너무 많아요" 하고 엑셀이 궁시렁거릴 것입니다. 즉 문법이 맞지 않는다는 얘기이지요.
| Data | Rank | Data | Rank | Data | Rank |
|---|---|---|---|---|---|
=INT(RAND()*100) | =INT(RAND()*100) | =INT(RAND()*100) | |||
| (이하 동일한 패턴으로 총 10행이 이어지며, 이 영역에는 아직 순위 수식이 없습니다) | |||||
그런데 아래의 테이블을 보니 제대로 적용이 되어 있군요. 어떻게 된 것일까요? 답을 보시기 전에 단 30초 만이라도 생각을 해 보신 다음 내려가세요.
| Data | Rank | Data | Rank | Data | Rank |
|---|---|---|---|---|---|
=INT(RAND()*100) | =RANK(B86,($B$86:$B$95,$D$86:$D$95,$F$86:$F$95)) | =INT(RAND()*100) | =RANK(D86,($B$86:$B$95,$D$86:$D$95,$F$86:$F$95)) | =INT(RAND()*100) | =RANK(F86,($B$86:$B$95,$D$86:$D$95,$F$86:$F$95)) |
| (이하 동일한 패턴으로 B95, D95, F95 행까지 이어집니다) | |||||
위의 빨간 셀에는 이런 수식이 들어있습니다.
=RANK(B59,($B$59:$B$68,$D$59:$D$68,$F$59:$F$68))
수식에 대한 설명은 필요없겠지요? 떨어져 있는 영역을 괄호를 이용하여 연결해 준 것이 요점입니다.
그리고 두 번째 질문하신 것, 즉 순위가 11위 미만인 데이터는 화면에 표시되지 않도록 하는 것은 숙제랍니다. 조건부 서식을 사용하시면 쉽게 해결이 될 것입니다. 안되는 분은 질문하세요.
정리 — RANK 함수로 불연속 영역 순위 구하기
| 상황 | 수식 형태 |
|---|---|
| 연속된 영역 하나 | =RANK(B49,$B$49:$B$58) |
| 콤마로만 나열(오류) | =RANK(B37,B37:B46,D37:D46,F37:F46) — 인수 오류 |
| 괄호로 묶은 불연속 영역(정상) | =RANK(B59,($B$59:$B$68,$D$59:$D$68,$F$59:$F$68)) |
자주 묻는 질문 (FAQ)
Q1. RANK 함수에 서로 떨어진 여러 영역을 한꺼번에 지정하려면 어떻게 하나요?
콤마(,)로 영역을 나열하는 대신, 각 영역을 괄호로 한 번 더 묶어 =RANK(B59,($B$59:$B$68,$D$59:$D$68,$F$59:$F$68)) 형태로 입력합니다. 이렇게 괄호로 묶으면 여러 개의 떨어진 영역을 하나의 참조 집합으로 취급할 수 있습니다.
Q2. =RANK(B37,B37:B46,D37:D46,F37:F46) 처럼 그냥 콤마로 나열하면 왜 오류가 나나요?
RANK 함수는 number, ref, order 세 개의 인수만 받을 수 있습니다. 콤마로 영역을 나열하면 인수 개수가 늘어나 '인수가 너무 많다'는 오류가 발생합니다. 여러 영역을 하나의 ref 인수로 넘기려면 반드시 괄호로 묶어 하나의 참조로 만들어야 합니다.
Q3. 순위가 11위 미만인 데이터만 화면에 표시하려면 어떻게 하나요?
조건부 서식을 사용하면 쉽게 해결할 수 있습니다. RANK로 구한 순위 값을 기준으로, 11 이상인 셀은 글자색을 배경색과 같게 하거나 셀을 숨기는 서식을 지정하면 원하는 순위 범위의 데이터만 눈에 띄게 만들 수 있습니다.
마치며
괄호 하나로 여러 영역을 하나의 참조로 묶어주는 요령은 RANK 함수뿐 아니라 SUM, COUNTIF 등 다른 함수에도 응용할 수 있는 유용한 테크닉입니다. 꼭 직접 실습해 보고 손에 익혀 두시기 바랍니다.