• 최초 작성일: 2009-10-07
  • 최종 수정일: 2026-09-24
  • 조회수: 27 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 중복없이 당첨자 뽑기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

강좌가 많이 늦었습니다(약 4개월만… ^^;;). 선선한 바람도 불어오고 하니 그간 놓았던 정신줄(?)을 다시 바로잡고 살아야겠다는 생각을 해봅니다.

이번 강좌부터는 ZIP 파일로 압축하지 않고 엑셀 파일 그대로 올립니다.

이 시대 경영학 '구루'의 한 사람인 톰 피터스는 '전략적으로 잊어버리기'를 강조했습니다. 새로운 것을 학습하느냐 하는 것보다 어떻게 과거의 낡은 생각에서 벗어나느냐가 더욱 중요한 시대가 된 것 같습니다.

누군가의 말처럼 한 인간의 경력에 있어서 지식은 '우유'와 비슷한 것 같습니다. 그만큼 신선도가 중요하다는 얘기겠지요. 흔히 기술분야에서 취득한 학위의 유통기한은 3년이라고 합니다. 이 기한 내에 자신이 알고 있는 지식을 새로운 것으로 교체하지 못하면 이내 맛이 간다는 의미입니다.

이제 사람들은 더 이상 '벌어먹고' 살지 않는다. 이제 사람들은 '배워먹고' 산다.

- 토머스 프리드먼

오늘 강좌는 김상면님께서 보내주신 것입니다.

사이트에 올라온 질문을 보면 현업에서 엑셀이 얼마나 많이 사용되는지, 또 얼마나 많은 사람들이 사용하는지 알 수 있습니다. 유용한 활용 예제를 하나 소개합니다.

아래와 같은 표가 있습니다.

매장 상품권 번호
강남A001
호곡A002
질곡A003
질타A004
강북A005
강타A006
연타A007
막타A008
속사A009
분사B001
연사B002
괴사B003
파산B004
염산B005
규산B006
계산B007
연산B008
질산B009
권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 지음

📊 신간 전자책(PDF) · 287쪽 · 13500원

엑셀 대시보드를 만드는 최적의 '표준 3계층 구조'

  • 3초 안에 읽히는 화면 설계 감각 습득
  • Microsoft Excel MVP의 실전 노하우 수록
  • 중간마진 없는 합리적인 가격, 오직 아이엑셀러에서만!
지금 구매하기 완성 화면 보기

중복없이 당첨자 뽑기

핵심 요약: RAND·RANK·COUNTIF로 중복 없는 추첨 순위 만들기

RAND로 난수를 부여하고 RANK로 순위를 매긴 뒤, 동점자는 COUNTIF로 보정해 겹치지 않는 순위를 만듭니다. 마지막엔 값으로 복사해 결과를 고정합니다.

  • 1단계: RAND()*100을 TRUNC로 정수화해 난수 부여
  • 2단계: RANK로 난수의 순위를 구해 추첨 순번 생성
  • 3단계: COUNTIF로 동점자를 보정해 순위 중복 제거
  • 4단계: 결과를 복사 → 값 붙여넣기로 고정

1. 먼저, 필요한 함수부터 나열해 보면 다음과 같습니다.

함수 역할
RAND임의의 순서로 당첨되어야 하니까 난수를 발생시키기 위해 사용합니다.
TRUNC반드시 써야하는 것은 아니지만 생소한 함수도 한번 써보는게 좋겠지요.
RANK요게 핵심입니다. 아시겠지만 자료의 순위를 구할 때 사용합니다.
COUNTIF이 함수도 또 핵심입니다. RANK 함수로 순위를 구할 수는 있지만 동점자 문제가 발생하는데 이 문제를 해결해 줍니다.

2. 함수를 알았으니 한번 구해 볼까요.

매장 상품권 번호 Rand Rank Countif 보정
강남A0010.12818118
호곡A0020.799717
질곡A0030.968212
질타A0040.983111
강북A0050.745919
강타A0060.22215115
연타A0070.29914114
막타A0080.40211111
속사A0090.51710110
분사B0010.913414
연사B0020.875616
괴사B0030.19016116
파산B0040.922313
염산B0050.17717117
규산B0060.889515
계산B0070.39912112
연산B0080.36413113
질산B0090.764818

(RAND로 만든 난수에 100을 곱하고 TRUNC로 정수부만 취한 값의 순위를 RANK로 구한 뒤, 혹시 모를 동점자를 COUNTIF로 보정해 최종 추첨 순위를 만드는 방식입니다.)

3. 이제 결과가 제대로 된 것 같지만 한가지 문제가 있습니다.

RAND 함수를 사용했기 때문에 그 결과값이 수시로 바뀝니다. 따라서 추첨순위가 한번 정해지면 계속 유지되어야 해야 합니다.

4. 보정 영역을 '편집-복사'한 다음, '편집-값 붙여 넣기' 하여 마무리 합니다.

이번 강좌 이상 끝!!! … 하면 완전히 날로 먹는게 되니까…

김상면님이 알려주신 방법에 착안하여 수식을 조금 다듬으면 다음과 같이 표현할 수도 있겠습니다.

=RANK(D66,$D$66:$D$83)+COUNTIF($D$66:D66,D66)-1

낯선 함수는 없으리라 생각합니다.

늘 그렇듯, 함수는 알고 있는 게 중요한 것이 아니라 어떻게 적재적소에 활용하느냐가 관건입니다.

오늘은 여기까지…

정리 — 중복 없는 추첨 순위 만들기

단계 핵심 작업
난수 생성 =TRUNC(RAND()*100)
순위 계산 =RANK(난수,범위)
동점자 보정 +COUNTIF(범위,해당값)로 중복 순위 제거
결과 고정 보정된 순위를 복사 후 값 붙여넣기
간결한 대안식 =RANK(D66,$D$66:$D$83)+COUNTIF($D$66:D66,D66)-1

자주 묻는 질문 (FAQ)

Q1. RAND 함수만으로 당첨자를 뽑으면 안 되나요?

RAND는 재계산될 때마다(예: 다른 셀 입력, 파일 재실행 등) 값이 바뀌는 휘발성 함수입니다. 그래서 RAND 값 자체를 당첨 근거로 남겨두면 결과가 계속 바뀌므로, RANK로 순위를 구한 뒤 값으로 고정해 두어야 합니다.

Q2. RANK 함수로 순위를 매겼는데 순위가 겹치는 경우가 있는 이유는 무엇인가요?

TRUNC로 정수화하는 과정에서 서로 다른 난수가 우연히 같은 정수 순위를 받을 수 있기 때문입니다. RANK는 동점자에게 같은 순위를 부여하므로, 그대로 두면 두 명이 1등이 되는 등 중복이 생깁니다.

Q3. 동점자로 인한 순위 중복은 어떻게 해결하나요?

COUNTIF로 지금까지 나온 같은 값의 개수를 세어 RANK 결과에 더해줍니다. 이렇게 하면 값이 같은 항목들도 서로 다른, 겹치지 않는 순위를 갖게 됩니다. =RANK(D66,$D$66:$D$83)+COUNTIF($D$66:D66,D66)-1 처럼 한 수식으로 간결하게 표현할 수도 있습니다.

마치며

VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 상단 메뉴에서 [Excel 강의] - [Excel 입문]을 먼저 보시면 이해하기 쉽습니다.