- 최초 작성일: 2018-01-08
- 최종 수정일: 2026-09-21
- 조회수: 74 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 함수로 만든 경품추첨기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
2018년 무술년 새해가 밝았습니다.
새해가 되면 복이 오기를, 안 좋은 일은 내게 오지 않기를 기원하는 것이 인지상정입니다. 하지만 그것보다 더 현실적이고 중요한 것은,
"어떤 일이 생겨도 평정심을 유지하고 헤쳐나갈 수 있는 강인한 정신력을 기르는 것"
이 아닐까 생각합니다. 혹자는 '멘탈'이라고도 하고, 또 누군가는 '회복탄력성(Resilience)'이라고도 부르는 그것 말이지요.
하여튼, 어쨌거나, 그럼에도 불구하고… 다들 소원성취하시고 뜻하신 바를 다 이루는 한 해가 되시길 기원합니다.
// 메일 하나
…(중략) Exceller님께서 예전에 만드신 프로그램 중에 경품추첨하는 프로그램을 보았습니다.
응용을 해볼려고 아무리 해도 지식이 짧아서 뜻대로 안됩니다.
저는 매크로나 VBA는 할 줄 몰라서 그러는데 혹시 함수나 다른 방법을 통해 가능할까요?
새해에도 건강하시고 좋은 강좌도 많이 많이 올려주세요…
연배가 좀 있는 분의 질문입니다. 무슨 일이든 궁하면 통하게 마련이죠. VBA로 할 때보다 시각적인 효과나 재미는 좀 덜합니다만, 함수만으로도 충분히 가능합니다.
엑셀 경품추첨기 만들기, 함수 3개면 끝
핵심 요약: 함수 3개로 만드는 경품추첨기
VBA나 매크로 없이 함수만으로 F9 키를 누르거나 재계산이 일어날 때마다 당첨자를 선정해 주는 경품추첨기를 만들 수 있습니다.
- 사용 함수: INDEX, RANDBETWEEN, COUNTA 세 가지입니다.
-
핵심 수식:
="축하합니다. " & INDEX(B33:B52, RANDBETWEEN(1,COUNTA(B33:B52))) & " 님!" - 동작 원리: COUNTA로 명단 인원수를 구해 RANDBETWEEN의 top 인수로 사용하고, 나온 난수 순번의 이름을 INDEX로 가져옵니다.
- 참고: VBA로 만들 때보다 시각적인 효과나 재미는 다소 덜합니다.
1. 명단과 결과 화면 — 재계산할 때마다 새 당첨자 선정
아래와 같은 데이터가 있다고 할 때, F9 키를 누르거나 재계산(recalculation)이 일어날 때마다 당첨자를 선정해 줍니다. 예제에서는 명단이 A32:B52 범위(32행은 머리글, 33~52행에 20명)에 있고, 당첨 문구는 D32 셀에 표시됩니다.
| 사번 | 성명 |
|---|---|
| A300016 | 백은희 |
| A410019 | 마원나 |
| A410020 | 김근수 |
| A410021 | 전미영 |
| A410022 | 김현철 |
| B400023 | 이상원 |
| B001224 | 김덕주 |
| B000025 | 박진환 |
| B010026 | 이병철 |
| A000027 | 조철선 |
| A231012 | 안세민 |
| C000028 | 김태현 |
| C000029 | 서유현 |
| C300015 | 김경원 |
| C451030 | 연대성 |
| C000031 | 김서형 |
| D410017 | 이수진 |
| A369647 | 최지혜 |
| D369648 | 서준희 |
| D000034 | 한효주 |
D32 셀에는 아래와 같은 당첨 메시지가 표시됩니다. 재계산이 일어날 때마다 다른 사람이 표시될 수 있습니다.
축하합니다. 백은희 님!
2. 사용된 수식 — INDEX, RANDBETWEEN, COUNTA
사용된 수식은 다음과 같습니다.
="축하합니다. " & INDEX(B33:B52, RANDBETWEEN(1,COUNTA(B33:B52))) & " 님!"
INDEX와 RANDBETWEEN, COUNTA 함수가 사용되었습니다. 아마 모르는 함수는 하나도 없으리라 생각합니다. RANDBETWEEN 함수의 사용 형태를 유의해서 보시면 되겠습니다.
3. RANDBETWEEN 함수 — 두 수 사이의 난수(정수) 구하기
이 함수는 지정한 두 수 사이의 난수(정수 형태)를 구해 줍니다.
RANDBETWEEN(bottom, top)
| 인수 | 설명 |
|---|---|
| bottom | 반환할 작은 정수 |
| top | 반환할 큰 정수 |
4. COUNTA 함수 — 명단 인원수를 top 인수로 활용하기
COUNTA 함수를 이용하여 지정한 범위 내에서 값이 들어있는 셀의 수를 구한 다음, 이것을 RANDBETWEEN 함수의 top 인수로 활용하였습니다.
정리 — 수식 구성 요소 한눈에 보기
이 수식이 어떤 순서로 당첨자를 만들어 내는지 표로 정리했습니다.
| 구성 요소 | 하는 일 |
|---|---|
| COUNTA(B33:B52) | 명단 범위에서 값이 들어 있는 셀의 수(예제에서는 20)를 구함 |
| RANDBETWEEN(1, 인원수) | 1부터 인원수 사이의 난수(정수)를 구함 |
| INDEX(B33:B52, 난수) | 명단에서 그 순번에 해당하는 성명을 가져옴 |
| "축하합니다. " & … & " 님!" | & 연산자로 앞뒤 문구를 연결해 최종 메시지를 완성함 |
자주 묻는 질문 (FAQ)
Q1. 경품추첨기의 당첨자는 언제 바뀌나요?
F9 키를 누르거나 재계산(recalculation)이 일어날 때마다 새로운 당첨자가 선정됩니다. 재계산은 워크시트에서 값을 입력하거나 수정할 때도 일어날 수 있으므로, 당첨자를 확정하려면 결과 셀을 복사해 값으로 붙여 넣어 두는 것이 좋습니다.
Q2. VBA나 매크로를 몰라도 경품추첨기를 만들 수 있나요?
네. 이 예제는 INDEX, RANDBETWEEN, COUNTA 함수만 사용하므로 VBA나 매크로 지식이 필요 없습니다. 다만 VBA로 만들 때보다 시각적인 효과나 재미는 다소 덜합니다.
Q3. 명단 인원이 바뀌면 수식을 고쳐야 하나요?
인원수는 COUNTA 함수가 범위 안에서 값이 들어 있는 셀의 수로 계산해 주므로 따로 고치지 않아도 됩니다. 다만 수식에 지정한 명단 범위(B33:B52) 안에서 빈 셀 없이 위에서부터 이어서 입력해야 하며, 명단이 이 범위를 벗어나 늘어나면 범위도 함께 넓혀 주어야 합니다.
마치며
늘 강조합니다만, 함수는 알고 있는 가짓수가 많은 게 중요한 게 아니라 알고 있는 것을 어떻게 적재적소에 활용하는가가 더 중요합니다. 물론 많은 함수를 알고 있으면 상황에 맞게 활용할 가능성은 높아지겠지요.
오늘은 짧게 여기까지…