- 최초 작성일: 2006-07-11
- 최종 수정일: 2026-09-26
- 조회수: 21 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 순위별 과목명 파악하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
한 학생의 국어·영어·수학·과학 순위를 이용해 1순위, 2순위, 3순위, 4순위에 해당하는 과목명을 자동으로 가져오는 방법을 살펴봅니다.
//질문 하나
첨부 파일을 보시면 한 학생의 국어, 영어, 수학, 과학의 순위가 각각 있습니다.
1등하는 과목과 2, 3, 4등 하는 과목을 각각 한글로 불러오고 싶습니다.
어떻게 방법이 없을까요? ㅠㅠ
학생2까지는 입력했는데…
일일이 직접 눈으로 확인하고 입력하려니 400명 넘게 확인하고 넣어야 하고…
책을 살펴봐도 응용을 할 수 있는 방법은 모르겠고 난감합니다. 좋은 방법 없을까요?
수고하세요~
순위별 과목명 파악하기
핵심 요약
SMALL 함수로 순위값을 찾고 MATCH로 해당 순위가 있는 위치를 찾은 다음 OFFSET으로 과목명을 가져오는 방법입니다.
- 학생별 국어·영어·수학·과학의 순위값을 기준으로 1순위부터 4순위까지 과목명을 자동으로 가져옵니다.
- SMALL 함수로 순위값을 작은 순서대로 찾습니다.
- MATCH 함수로 해당 순위값이 있는 과목의 위치를 찾습니다.
- OFFSET 함수로 계산된 위치의 과목명을 반환합니다.
- COLUMN 함수와 ROW 함수를 이용하여 복사할 때도 순위별 결과가 자동으로 바뀌도록 구성합니다.
예제 데이터
| ■ 상담원별 성적 현황(3개월 평균) | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| 1. 우수자 | |||||||||
| 순번 | 상담원 | 1순위 | 2순위 | 3순위 | 4순위 | 국어 | 영어 | 수학 | 과학 |
| 1 | 학생1 | 국어 | 영어 | 수학 | 과학 | 1 | 2 | 3 | 5 |
| 5 | 학생2 | 영어 | 국어 | 과학 | 수학 | 15 | 6 | 25 | 24 |
| 3 | 학생3 | 영어 | 국어 | 과학 | 수학 | 9 | 3 | 11 | 10 |
| 4 | 학생4 | 국어 | 영어 | 수학 | 과학 | 3 | 9 | 10 | 24 |
| 5 | 학생5 | 영어 | 국어 | 과학 | 수학 | 15 | 6 | 25 | 24 |
| 6 | 학생6 | 과학 | 수학 | 영어 | 국어 | 14 | 8 | 6 | 2 |
| 7 | 학생7 | 수학 | 과학 | 국어 | 영어 | 11 | 14 | 4 | 5 |
| 8 | 학생8 | 영어 | 국어 | 과학 | 수학 | 21 | 6 | 43 | 28 |
| 9 | 학생9 | 과학 | 영어 | 국어 | 수학 | 16 | 11 | 23 | 4 |
| 10 | 학생10 | 국어 | 수학 | 영어 | 과학 | 10 | 18 | 11 | 20 |
| 11 | 학생11 | 영어 | 수학 | 국어 | 국어 | 18 | 12 | 14 | 18 |
| 12 | 학생12 | 영어 | 수학 | 수학 | 국어 | 20 | 11 | 13 | 13 |
| 13 | 학생13 | 국어 | 수학 | 과학 | 영어 | 17 | 21 | 19 | 20 |
| 14 | 학생14 | 수학 | 영어 | 국어 | 과학 | 24 | 22 | 21 | 31.3 |
| 15 | 학생15 | 영어 | 국어 | 수학 | 과학 | 29.3 | 16.3 | 31 | 65 |
| 16 | 학생16 | 수학 | 국어 | 영어 | 과학 | 16.5 | 31.5 | 9 | 69.5 |
| 17 | 학생17 | 수학 | 과학 | 영어 | 국어 | 28.3 | 21.7 | 15.7 | 18 |
| 18 | 학생18 | 국어 | 수학 | 영어 | 과학 | 22 | 32 | 23 | 77 |
| 19 | 학생19 | 과학 | 영어 | 수학 | 국어 | 33 | 21.3 | 24.3 | 15.7 |
| 20 | 학생20 | 영어 | 국어 | 수학 | 과학 | 28.7 | 25.7 | 33.7 | 62.7 |
| 21 | 학생21 | 영어 | 과학 | 국어 | 수학 | 39.7 | 15 | 67 | 16.3 |
| 22 | 학생22 | 국어 | 영어 | 과학 | 수학 | 15.5 | 39.5 | 48 | 40 |
| 23 | 학생23 | 영어 | 국어 | 수학 | 과학 | 31.7 | 25 | 38 | 56 |
| 24 | 학생24 | 영어 | 수학 | 과학 | 국어 | 34 | 23 | 26 | 31.3 |
| 25 | 학생25 | 과학 | 국어 | 영어 | 수학 | 27.3 | 30 | 44.7 | 26.3 |
| 26 | 학생26 | 국어 | 영어 | 수학 | 과학 | 21.3 | 41.7 | 44 | 47.7 |
| 27 | 학생27 | 영어 | 수학 | 국어 | 과학 | 36 | 27 | 28.7 | 47.3 |
| 28 | 학생28 | 과학 | 수학 | 국어 | 영어 | 26.5 | 36.7 | 13.7 | 6.3 |
| 29 | 학생29 | 국어 | 영어 | 과학 | 수학 | 29 | 34.3 | 61 | 40.7 |
| 30 | 학생30 | 국어 | 영어 | 과학 | 수학 | 28 | 38.7 | 56.3 | 48.7 |
| 31 | 학생31 | 수학 | 영어 | 국어 | 과학 | 45.7 | 24 | 18 | 54.5 |
| 32 | 학생32 | 수학 | 국어 | 과학 | 영어 | 32.3 | 37.7 | 18.7 | 37.3 |
| 33 | 학생33 | 과학 | 국어 | 영어 | 수학 | 34.3 | 37 | 38.3 | 28.7 |
| 34 | 학생34 | 수학 | 영어 | 국어 | 과학 | 36.3 | 35 | 26 | 62.7 |
| 35 | 학생35 | 수학 | 과학 | 영어 | 국어 | 47.5 | 25 | 9 | 13 |
| 36 | 학생36 | 수학 | 과학 | 영어 | 국어 | 40 | 33 | 18.3 | 25.3 |
| 37 | 학생37 | 국어 | 영어 | 과학 | 수학 | 33 | 43 | 47.3 | 47 |
| 38 | 학생38 | 수학 | 영어 | 국어 | 과학 | 39.3 | 36.7 | 27 | 67.3 |
| 39 | 학생39 | 국어 | 수학 | 영어 | 과학 | 36.5 | 40.5 | 39 | 54 |
| 40 | 학생40 | 수학 | 과학 | 국어 | 영어 | 37 | 41 | 6 | 33.5 |
| 41 | 학생41 | 수학 | 과학 | 영어 | 국어 | 48.3 | 32 | 29 | 31.3 |
| 42 | 학생42 | 과학 | 영어 | 수학 | 국어 | 49 | 34.3 | 41 | 30 |
| 43 | 학생43 | 국어 | 수학 | 영어 | 과학 | 27 | 56.7 | 44 | 58.7 |
| 44 | 학생44 | 수학 | 영어 | 국어 | 과학 | 48.7 | 35 | 34.7 | 52 |
| 45 | 학생45 | 과학 | 국어 | 영어 | 수학 | 39.7 | 45.7 | 46.3 | 35.7 |
| 46 | 학생46 | 과학 | 영어 | 국어 | 수학 | 44 | 41.7 | 53 | 30 |
| 47 | 학생47 | 국어 | 수학 | 과학 | 영어 | 30.7 | 55.3 | 36.3 | 37 |
| 48 | 학생48 | 과학 | 영어 | 수학 | 국어 | 54.3 | 33 | 42.7 | 24.7 |
| 49 | 학생49 | 수학 | 영어 | 국어 | 과학 | 56 | 33 | 0 | 79 |
| 50 | 학생50 | 수학 | 영어 | 국어 | 과학 | 48.3 | 42 | 34.5 | 49.3 |
| 51 | 학생51 | 수학 | 과학 | 국어 | 영어 | 37.7 | 53.3 | 15.7 | 27.3 |
| 52 | 학생52 | 수학 | 영어 | 과학 | 국어 | 63 | 28 | 0 | 31 |
| 53 | 학생53 | 국어 | 수학 | 과학 | 영어 | 32 | 61.3 | 45.7 | 48 |
| 54 | 학생54 | 영어 | 수학 | 국어 | 과학 | 59 | 35 | 49 | 77.5 |
| 55 | 학생55 | 과학 | 수학 | 국어 | 영어 | 44.7 | 52 | 44.3 | 37.7 |
| 56 | 학생56 | 국어 | 과학 | 영어 | 수학 | 48.7 | 49.3 | 54 | 49 |
| 57 | 학생57 | 과학 | 수학 | 국어 | 영어 | 42.3 | 58 | 41 | 35.3 |
| 58 | 학생58 | 영어 | 수학 | 과학 | 국어 | 66 | 35 | 38.3 | 47.7 |
| 59 | 학생59 | 수학 | 국어 | 과학 | 영어 | 42.7 | 59.7 | 38.3 | 43.7 |
| 60 | 학생60 | 국어 | 과학 | 수학 | 영어 | 37.3 | 66.3 | 52.7 | 40.3 |
| 61 | 학생61 | 수학 | 국어 | 과학 | 영어 | 33 | 72 | 0 | 67 |
| 62 | 학생62 | 과학 | 수학 | 영어 | 국어 | 53.7 | 52.7 | 45.3 | 42.7 |
| 63 | 학생63 | 과학 | 국어 | 영어 | 수학 | 50 | 57 | 62.7 | 44.3 |
| 64 | 학생64 | 수학 | 영어 | 과학 | 국어 | 63.7 | 45.3 | 17 | 46 |
| 65 | 학생65 | 수학 | 영어 | 과학 | 국어 | 64.7 | 47.7 | 42 | 57.3 |
| 66 | 학생66 | 수학 | 과학 | 국어 | 국어 | 56.3 | 56.3 | 34.3 | 40.3 |
| 67 | 학생67 | 수학 | 국어 | 과학 | 영어 | 48 | 69 | 0 | 60 |
| 68 | 학생68 | 과학 | 수학 | 국어 | 영어 | 57 | 60 | 49.7 | 36 |
| 69 | 학생69 | 과학 | 영어 | 수학 | 국어 | 64 | 54.7 | 61.7 | 45.3 |
| 70 | 학생70 | 국어 | 수학 | 과학 | 영어 | 45.3 | 76 | 55.3 | 55.7 |
| 71 | 학생71 | 수학 | 과학 | 국어 | 영어 | 60 | 61.7 | 47.7 | 49.7 |
| 72 | 학생72 | 과학 | 수학 | 영어 | 국어 | 62.3 | 60 | 33 | 27.3 |
| 73 | 학생73 | 영어 | 수학 | 국어 | 국어 | 70 | 53 | 60 | 70 |
| 74 | 학생74 | 과학 | 수학 | 국어 | 영어 | 56 | 70.7 | 34 | 31.7 |
| 75 | 학생75 | 과학 | 수학 | 영어 | 국어 | 74 | 56.7 | 55.7 | 38 |
| 76 | 학생76 | 수학 | 국어 | 과학 | 영어 | 53 | 78.7 | 48.7 | 66.7 |
| 77 | 학생77 | 과학 | 수학 | 영어 | 국어 | 74.7 | 57.7 | 51 | 36.7 |
| 78 | 학생78 | 국어 | 수학 | 과학 | 영어 | 54.7 | 78 | 57.7 | 60.3 |
| 79 | 학생79 | 수학 | 영어 | 과학 | 국어 | 72.3 | 61.3 | 59 | 66.3 |
| 80 | 학생80 | 과학 | 수학 | 국어 | 영어 | 59 | 76.3 | 54 | 53 |
| 81 | 학생81 | 영어 | 과학 | 국어 | 수학 | 72 | 63.5 | 74 | 71.5 |
| 82 | 학생82 | 국어 | 수학 | 과학 | 영어 | 60 | 77 | 70 | 74 |
여기서 '학생1'의 과목별 순위를 보면 1, 2, 3, 5로 되어 있습니다.
따라서 각 과목 아래에 있는 숫자값이 작은 것부터 1순위, 2순위, 3순위 순으로 과목을 불러오면 되겠지요?
n번째의 작은 값을 불러와야 하므로 Small 함수를 사용해야 할 것 같고…
또 특정한 위치에서 얼마만큼씩 떨어져 있는 영역의 값을 불러와야 하므로 Offset 함수를 쓰고 싶다는 생각이 불현듯 머리에 떠오르시지요?
이런 생각을 했다는 것 자체만으로도 문제의 반은 해결한 것입니다.
이제 문제의 나머지 절반을 해결해 보도록 하지요.
수식 해석하기
C4 셀에는 이런 수식이 들어 있습니다.
길고 복잡한 수식을 만나면 도망가거나 혹은 눈싸움 하지 말고… 어떻게??
그렇습니다! 맨 안쪽부터, 도막을 내어 해석해서 나오면 됩니다.
이 경우에는 중첩되는(Nesting) 구조가 아니므로 그냥 앞에서부터 순차적으로 해석을 해 나가면 되겠습니다.
(1) -ROW()+3
ROW 함수는 참조 영역의 행 번호를 알려줍니다. '학생1'의 경우 4행에 위치해 있으므로 결과값은 '-1'입니다.
(2) SMALL($G4:$J4,COLUMN()-2)
C4 셀의 Column은 3이지요? 따라서 이 수식은 G4:J4 영역의 값 중에서 가장 작은 값을 구해 줍니다. 결과는 국어 과목인 '1'입니다.
(3) MATCH(SMALL($G4:$J4,COLUMN()-2),$G4:$J4,0)
'SMALL($G4:$J4,COLUMN()-2)'의 결과값이 1이었으므로 이 수식은 'MATCH(1,$G4:$J4,0)'으로 바꿀 수 있겠지요?
이 수식은 G4:J4 영역 중에서 1이라는 값이 들어있는 셀의 위치를 구하는 것이니까 결과값은 '1'입니다.
핵심 수식
=OFFSET($G4,-ROW()+3,MATCH(SMALL($G4:$J4,COLUMN()-2),$G4:$J4,0)-1)
학생1의 순위값은 국어 1, 영어 2, 수학 3, 과학 5입니다. 따라서 작은 값부터 순서대로 과목명을 불러오면 됩니다.
1. 행 위치 계산
-ROW()+3학생1이 4행에 있으므로 결과는 -1이 됩니다.
2. n번째 작은 값 찾기
SMALL($G4:$J4,COLUMN()-2)C4의 열 번호는 3이므로 COLUMN()-2는 1입니다. 따라서 G4:J4에서 가장 작은 값인 1을 찾습니다.
3. 해당 값의 위치 찾기
MATCH(SMALL($G4:$J4,COLUMN()-2),$G4:$J4,0)첫 번째 순위값이 1이므로 MATCH(1,$G4:$J4,0)이 되고 결과는 1입니다.
4. OFFSET으로 과목명 반환
위의 행·열 이동값을 OFFSET에 전달하면 순위에 해당하는 과목명을 가져올 수 있습니다.
정리
| 함수 | 역할 |
|---|---|
| SMALL | n번째 작은 순위값 반환 |
| MATCH | 순위값의 위치 반환 |
| OFFSET | 계산된 위치의 과목명 반환 |
자주 묻는 질문 (FAQ)
순위에 따라 과목명을 자동으로 가져올 수 있나요?
SMALL로 순위값을 찾고 MATCH로 위치를 찾은 뒤 OFFSET으로 과목명을 가져올 수 있습니다.
왜 SMALL 함수를 사용하나요?
1순위, 2순위처럼 숫자가 작을수록 높은 순위이므로 n번째 작은 값을 찾기 위해 사용합니다.
INDEX와 MATCH로도 구현할 수 있나요?
가능합니다. 이 예제에서는 OFFSET을 이용해 기준 셀에서 필요한 위치로 이동하는 방식을 사용합니다.
마치며
길고 복잡해 보이는 수식도 안쪽의 함수부터 하나씩 계산해 보면 작동 원리를 쉽게 이해할 수 있습니다.