- 최초 작성일: 2001-10-30
- 최종 수정일: 2026-09-29
- 조회수: 28 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 워크시트 상에서 중복없는 난수 만들기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
언젠가 VBA 강좌 시간에(찾아보니까 VB0098 강좌입니다) 중복없는 난수 만들기에 대해 소개해 드렸습니다. 2차원 배열 변수를 사용하여 최대한 복잡하게(?) 작성을 했던 것으로 기억합니다. 실은 두 세번만 살펴보면 그다지 어렵지 않다는 것을 아시게 되지만…
그런데 워크시트 상에서, VBA를 사용하지 않고서도 가능합니다. (이 방법은 오래 전에 이강현님 사이트에 놀러 갔다가 얻은 것입니다)
워크시트 상에서 중복없는 난수 만들기
핵심 요약
- 워크시트 함수만으로 중복되지 않는 순번 형태의 난수를 만드는 방법을 소개합니다.
- 범위에 RAND 함수를 한꺼번에 입력한 뒤 RANK 함수로 각 난수의 순위를 계산합니다.
- 난수 값 자체가 아니라 1부터 항목 수까지의 순위를 사용하므로 중복 없는 번호를 얻을 수 있습니다.
(1) A1:A30 까지의 영역을 범위로 지정합니다.
(2) 이 상태에서, =rand() 라고 입력하고 Ctrl + Enter키를 함께 탁 칩니다.
(3) B1 셀에 =rank(a1,$a$1:$a$30) 이렇게 입력한 다음 수식을 아래로 주욱 복사합니다. 이 때의 등수가 바로 중복되지 않는 숫자입니다. VB0098에서 소개해 드린 것에 비해 약간의 제약이 따르는 반면, 간편한 측면이 있을 것입니다.
| 0.744340133183871 | 6 |
| 0.673573616008128 | 8 |
| 0.071658771481792 | 14 |
| 0.404562752673133 | 11 |
| 0.701792426127793 | 7 |
| 0.573054410090057 | 10 |
| 0.93518387853348 | 3 |
| 0.669760858380301 | 9 |
| 0.177700950780543 | 12 |
| 0.0895735801830537 | 13 |
| 0.930004298767507 | 4 |
| 0.943834731194378 | 2 |
| 0.757995426171687 | 5 |
| 0.991377870142166 | 1 |
| 0.0180032407938733 | 15 |
"그럼 이딴 거는 배워서 어디다 써 먹나요?" 하는 분이 계시겠지요? 경품 추첨을 할 때 중복되지 않는 번호를 뽑아낼 때에도 사용할 수 있겠고, 시험 문제를 출제할 때(문제은행식) 전체 문항 수를 한 100문항 정도 만들어 놓고 그 때 그 때 필요한 문항 수만큼 중복없이 추출하고자 할 때에도 사용하실 수 있겠지요?
정리 — RAND와 RANK로 중복없는 난수 만들기
| 항목 | 설명 |
|---|---|
| 1단계 | 범위를 지정한 뒤 =RAND()를 입력하고 Ctrl+Enter로 한꺼번에 채움 |
| 2단계 | =RANK(A1,$A$1:$A$30)으로 각 난수의 순위를 계산 |
| 활용 예 | 경품 추첨 번호, 문제은행식 시험 문항 추출 |
| 비교 | VB0098의 VBA 2차원 배열 방식보다 간편하지만 약간의 제약이 있음 |
자주 묻는 질문 (FAQ)
Q1. 워크시트 함수만으로 중복 없는 난수를 만들려면 어떤 함수를 사용하나요?
RAND 함수와 RANK 함수를 조합합니다. 먼저 범위 전체에 RAND()를 한꺼번에 채운 뒤, RANK 함수로 각 난수의 순위를 구하면 그 순위 자체가 중복 없는 번호가 됩니다.
Q2. RAND 값을 범위 전체에 한 번에 입력하려면 어떻게 하나요?
원하는 범위를 먼저 드래그로 선택한 다음 =RAND()를 입력하고 Ctrl+Enter를 누르면, 선택한 범위 전체에 같은 수식이 각 셀 기준으로 한꺼번에 채워집니다.
Q3. VBA의 2차원 배열 방식과 비교하면 어떤 차이가 있나요?
VB0098 강좌에서 소개한 VBA 2차원 배열 방식은 코드 작성이 필요한 대신 유연하고, 이번 RAND+RANK 워크시트 함수 방식은 VBA 없이 간편하게 적용할 수 있는 대신 약간의 제약이 따릅니다.
마치며
RAND와 RANK 두 함수만 조합해도 VBA 없이 중복 없는 순번형 난수를 손쉽게 만들 수 있습니다. 경품 추첨이나 문제은행식 문항 추출처럼 중복을 피해야 하는 상황에서 유용하게 활용해 보시기 바랍니다.