- 최초 작성일: 2006-06-30
- 최종 수정일: 2026-09-26
- 조회수: 20 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 한 셀의 숫자 내용을 큰 수부터 정렬하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
게시판에 올라온 질문에서 출발해, 한 셀에 입력된 숫자의 각 자릿값을 큰 수부터 다시 배열하는 방법을 살펴봅니다.
한 셀에 "23110"이 있다고 할 때 큰 수부터 정렬하여 새로운 숫자로 만들고 싶습니다. 수식으로 가능한 방법이 있을까요?
한 셀의 숫자 내용을 큰 수부터 정렬하기
핵심 요약
한 셀에 들어 있는 숫자를 한 자리씩 분리한 뒤 LARGE 함수로 큰 숫자부터 선택하고, 각 자릿값을 다시 조합하면 새로운 숫자를 만들 수 있습니다.
- MID로 각 자리 숫자를 분리합니다.
- LARGE로 큰 숫자부터 가져옵니다.
- ROW,INDIRECT로 필요한 순위를 배열로 만듭니다.
- 10의 거듭제곱을 곱해 원래 자릿값으로 되돌립니다.
예제와 결과
| 정렬 전 | 정렬 후 |
|---|---|
| 24310 | 43210 |
| 123 | 321 |
| 123190 | 932110 |
사용할 수식
=SUM(LARGE(MID(A2,ROW(INDIRECT(1&":"&LEN(A2))),1)*1,ROW(INDIRECT(1&":"&LEN(A2))))*10^(LEN(A2)-ROW(INDIRECT(1&":"&LEN(A2)))))
이 수식은 크게 두 부분으로 나눠 볼 수 있습니다. 먼저 숫자의 각 자리를 분리해 크기순으로 정렬하고, 그 숫자를 다시 원래 자리 구조에 맞게 배치합니다.
수식의 작동 원리
1. 숫자의 자릿수 파악하기
ROW(INDIRECT(1&":"&LEN(B31)))
B31의 길이를 구하고 INDIRECT와 ROW를 이용해 각 자리에 대응하는 배열을 만듭니다. 예제에서는 {1;2;3;4;5}에 해당하는 위치 정보가 만들어집니다.
2. 각 자리의 숫자를 큰 순서로 추출하기
LARGE(VALUE(MID(B31,ROW(INDIRECT(1&":"&LEN(B31))),1)),ROW(INDIRECT(1&":"&LEN(B31))))
MID로 한 자리씩 분리하고 VALUE로 숫자로 변환한 다음 LARGE를 이용해 1순위부터 차례대로 큰 값을 가져옵니다.
3. 각 숫자를 자릿값에 맞게 배치하기
10^(LEN(B31)-ROW(INDIRECT(1&":"&LEN(B31))))
예를 들어 5자리 숫자라면 10,000·1,000·100·10·1을 각 숫자에 대응시킵니다.
따라서 예제의 중간 계산은 다음과 같습니다.
=SUM({4;3;2;1;0}*{10000;1000;100;10;1})
=SUM({40000;3000;200;10;0})
=43210
이 수식은 배열 계산을 사용하므로 해당 Excel 버전에서는 수식을 입력한 뒤 Ctrl+Shift+Enter로 마무리해야 합니다.
정리
| 함수 | 역할 |
|---|---|
| MID | 문자열에서 한 자리씩 추출 |
| LARGE | 큰 값부터 순서대로 추출 |
| ROW/INDIRECT | 자리와 순위를 배열로 생성 |
| SUM | 각 자릿값을 합쳐 최종 숫자 생성 |
자주 묻는 질문 (FAQ)
한 셀의 숫자를 큰 순서로 정렬할 수 있나요?
MID로 각 자릿값을 분리하고 LARGE로 큰 값부터 가져온 뒤 자릿값을 다시 조합하면 됩니다.
이 수식은 배열 수식인가요?
원본 예제에서는 배열 계산을 사용하므로 구버전 Excel에서는 Ctrl+Shift+Enter로 입력합니다.
문자열에도 같은 방법을 쓸 수 있나요?
숫자처럼 각 문자를 비교하고 재배치하는 문제라면 유사한 방식으로 응용할 수 있습니다.
마치며
한 셀 안의 숫자도 함수들을 조합하면 각 자리로 분해하고 원하는 순서로 다시 조립할 수 있습니다. 복잡해 보이는 배열 수식도 작은 단위로 나누어 보면 작동 원리를 이해하기가 한결 쉬워집니다.