- 최초 작성일: 2001-03-25
- 최종 수정일: 2026-09-29
- 조회수: 27 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 상위 n개 합계 구하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
해외 Spreadsheet 관련 사이트를 돌아다니다 보니 이런 질문이 눈에 띄는군요.
I use EXCEL 97 version, and I need to calculate the Sum of the five largest values in a range of 100 cells. 저는 EXCEL 97을 사용하고 있는데, 100개의 셀 중에서 상위 5개 값의 합계를 구하고자 합니다. The range isn't sorted, so I can't use a SUM function. Do you have any suggestions about how I could handle this problem? 영역은 정렬이 되어 있지 않으므로 Sum 함수를 사용할 수는 없습니다. 어떻게 하면 이 문제를 해결할 수 있을지 알려 주십시오.
그것도 문제라고… 하면서 회심의 미소를 짓는 분이 많으시군요. ^^ 그렇지요. 이런 류의 질문은 이제 질문도 아닐 정도가 되어야 정상입니다. 일단 예제 파일을 하나 만들고…
상위 n개 합계 구하기
핵심 요약
- 정렬되지 않은 범위에서 상위 N개 값의 합계를 구하려면 LARGE 함수로 각 순위의 값을 가져와 합산할 수 있습니다.
- 상위 몇 개가 고정되어 있다면 배열 상수 {1,2,3,4,5}를 사용할 수 있지만 N이 바뀌면 수식을 다시 써야 합니다.
- ROW(INDIRECT("1:N"))을 사용하면 순위 배열을 동적으로 만들 수 있어 N만 바꾸어 간결하게 상위 N개 합계를 계산할 수 있습니다.
참고: 원문의 예제 표(난수 100개의 데이터와 수식 결과)는 표시가 손상되어 있어, 표 안에 남아 있던 수식만 골라 아래와 같이 정리했습니다. 수식에 나오는 Stage는 100개의 난수 셀에 붙여 둔 이름입니다.
(방법 1) 아마 초보님이라면 이렇게 하실 것입니다.
=LARGE(Stage,1)+LARGE(Stage,2)+LARGE(Stage,3)+LARGE(Stage,4)+LARGE(Stage,5)
(방법 2) 배열수식을 사용할 줄 안다고 생각하는 분은 또 이렇게 하시겠지요?
{=SUM(LARGE(Stage,{1,2,3,4,5}))}
처음의 방법보다는 간결해 졌지만 아직도 복잡해질 소지가 있습니다. 상위 5개까지의 합이 아니라 전체 100개의 자료 중에서 상위 30개 까지의 합을 구하고자 한다면 …{1,2,3,4,5,6,7,…30} 이런 식으로 30개를 일일이 적어주어야 하겠지요.
(방법 3) Indirect 함수를 함께 사용하는 방법
{=SUM(LARGE(Stage,ROW(INDIRECT("1:5"))))}
Indirect 함수와 Row 함수를 함께 사용하면 이렇게 간결하게 표현할 수가 있는 것입니다. 만약 상위 10개의 합을 구하고자 한다면 마지막 부분의 5를 10으로 바꾸어주기만 하면 됩니다.
이 방법에 대해서는 X0188 강좌에서 이미 한번 설명을 드렸었지요?
다음 시간에…
정리 — 상위 n개 합계 구하기
| 구분 | 내용 |
|---|---|
| 문제 | 정렬되지 않은 100개의 셀에서 상위 5개 값의 합계 구하기 |
| 방법 1 | =LARGE(Stage,1)+LARGE(Stage,2)+LARGE(Stage,3)+LARGE(Stage,4)+LARGE(Stage,5) |
| 방법 2 | {=SUM(LARGE(Stage,{1,2,3,4,5}))} (개수가 늘면 순위를 일일이 나열해야 함) |
| 방법 3 | {=SUM(LARGE(Stage,ROW(INDIRECT("1:5"))))} |
| 개수 변경 | 방법 3의 5를 원하는 개수로 변경 |
자주 묻는 질문 (FAQ)
Q1. 정렬되지 않은 범위에서 상위 N개의 합계는 어떻게 구하나요?
LARGE 함수로 n번째 큰 값을 구해 합산합니다. LARGE 함수의 순위 인수에 배열을 넣고 SUM으로 감싸는 배열 수식을 사용하면 간단합니다.
Q2. 상위 30개처럼 개수가 많을 때는 어떻게 하나요?
순위를 중괄호 안에 일일이 적으면 번거롭습니다. ROW와 INDIRECT를 조합하면 숫자만 바꾸어 순위 배열을 만들 수 있습니다.
Q3. ROW와 INDIRECT를 사용한 방법은 어떤 장점이 있나요?
상위 10개의 합을 구하고 싶다면 수식 마지막 부분의 5를 10으로 바꾸어주기만 하면 되므로 간결하고 수정도 쉽습니다.
마치며
LARGE, ROW, INDIRECT를 조합한 배열 수식을 익혀 두면 상위 N개 계산이 훨씬 간단해집니다. VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 상단 메뉴에서 [Excel 강의] - [Excel 입문]을 먼저 보시면 이해하기 쉽습니다.