메뉴
실무 위키응용 공식두 정수 사이 중복 없는 랜덤 생성 공식

두 정수 사이 중복 없는 랜덤 생성 공식

지원 버전 자세히 보기
엑셀 2013 이전엑셀 2016엑셀 2019엑셀 2021엑셀 2024M365웹 엑셀

지정한 두 정수 사이의 값을 중복 없이 무작위로 출력하는 공식입니다. 모든 버전에서 쓰는 배열수식과 SORTBY 함수 동적 배열 두 가지 방법으로 만들 수 있습니다.

두 정수 사이 중복 없는 랜덤 생성 공식 예제 미리보기
예제 미리보기 크게 보기

인수 설명

01LARGE + RANDBETWEEN 배열 공식 (모든 버전)

{=LARGE ( ROW ( INDIRECT ( "1:"&(종료값-시작값+1) ) )*NOT ( COUNTIF ( 누적결과범위, ROW ( INDIRECT ( "1:"&(종료값-시작값+1) ) )+시작값-1 ) ), RANDBETWEEN ( 1, 종료값-시작값+2-ROWS ( 누적결과범위 ) ) )+시작값-1}
{=LARGE ( ROW ( INDIRECT ( "1:"&(종료값-시작값+1) ) )*NOT ( COUNTIF ( 누적결과범위, ROW ( INDIRECT ( "1:"&(종료값-시작값+1) ) )+시작값-1 ) ), RANDBETWEEN ( 1, 종료값-시작값+2-COLUMNS ( 누적결과범위 ) ) )+시작값-1}
인수 설명 자세히 보기(인수를 클릭하면 해당 영역만 강조됩니다. 여러 개를 함께 켜고 끌 수 있습니다.)
인수구분설명
시작값필수생성할 범위의 가장 작은 정수입니다. 음수와 0도 사용할 수 있으며 종료값보다 클 수 없습니다.
종료값필수생성할 범위의 가장 큰 정수입니다. 출력 셀 수가 종료값-시작값+1을 넘으면 남은 후보가 없어 오류를 반환합니다.
누적결과범위필수머리글부터 현재 셀 바로 앞까지 포함하는 확장 범위입니다. 세로 입력은 첫 셀을 절대참조로 고정하고, 가로 입력은 첫 열을 고정합니다. 예) $E$1:E1, $F$2:F2
E7{=LARGE(ROW(INDIRECT("1:"&($C$2-$B$2+1)))*NOT(COUNTIF($E$1:E6,ROW(INDIRECT("1:"&($C$2-$B$2+1)))+$B$2-1)),RANDBETWEEN(1,$C$2-$B$2+2-ROWS($E$1:E6)))+$B$2-1}
A
B
C
D
E
F
1
순번
시작값
종료값
랜덤 결과
2
1
-2
3
-1
3
2
2
4
3
0
5
4
3
6
5
1
7
6
-2
8
검산
6개
중복 없음
9
E2:E6은 앞선 추출 결과를 고정한 재현용 값이며 E7만 배열수식으로 계산합니다. -2부터 3까지 여섯 정수가 한 번씩만 나오고 마지막 남은 값 -2를 E7 셀이 반환합니다. 엑셀 2019 이하에서는 Ctrl+Shift+Enter로 입력하고, 엑셀 2021 이상에서는 일반 입력할 수 있습니다.

02SORTBY + RANDARRAY 공식 (엑셀 2021 이상)

=SORTBY ( SEQUENCE ( 종료값-시작값+1, , 시작값 ), RANDARRAY ( 종료값-시작값+1 ) )
인수 설명 자세히 보기
인수구분설명
시작값필수생성할 범위의 가장 작은 정수입니다. 음수와 0도 사용할 수 있습니다.
종료값필수생성할 범위의 가장 큰 정수입니다. 시작값보다 크거나 같은 값을 입력합니다. 예제 시트의 검산모드가 '고정'일 때는 B2:B7의 난수 키 6개를 그대로 쓰므로, 시작값·종료값을 바꿔 정수 개수가 6이 아니게 되면 E2를 '생성'으로 바꿔야 합니다.
G2=SORTBY(SEQUENCE($D$2-$C$2+1,,$C$2),IF($E$2="고정",$B$2:$B$7,RANDARRAY($D$2-$C$2+1)))
A
B
C
D
E
F
G
H
1
후보
고정 난수 키
시작값
종료값
검산모드
랜덤 결과
2
-2
0.42
-2
3
고정
0
3
-1
0.81
4
0
0.16
5
1
0.67
6
2
0.55
7
3
0.29
8
검산
키 6개
후보 6개
합계 3
9

수식을 입력한 셀자동으로 채워진 범위

실제로 사용할 때는 위 구문의 SORTBY 함수 수식만 입력하면 되고, 예제 시트는 결과를 고정하려고 검산모드가 고정일 때 B2:B7의 난수 키를 대신 사용합니다. 이 키로 G2:G7에는 0, 3, -2, 2, 1, -1이 스필됩니다. E2를 생성으로 바꾸면 RANDARRAY 함수가 새 난수 키를 만들어 -2부터 3까지의 정수를 다시 섞습니다. 고정 난수 키는 여섯 개뿐이므로 시작값·종료값을 바꿔 후보 개수를 늘리려면 생성 모드로 두어야 합니다.
이 공식이 사용하는 함수
LARGE 함수 ROW 함수 INDIRECT 함수 NOT 함수 COUNTIF 함수 RANDBETWEEN 함수 ROWS 함수 COLUMNS 함수 SORTBY 함수 SEQUENCE 함수 IF 함수 RANDARRAY 함수

동작 원리

01LARGE + RANDBETWEEN 배열 공식 (모든 버전)

ROW 함수와 INDIRECT 함수가 양의 순번 배열을 만들고, COUNTIF 함수와 NOT 함수가 이미 사용한 순번을 제외한 뒤 RANDBETWEEN 함수와 LARGE 함수가 남은 순번을 무작위로 고릅니다.

레거시 배열 공식 예제 시트에서 E7 셀이 -2를 반환하는 계산 과정입니다. 단계마다 강조된 부분이 어떻게 계산되는지 살펴보세요.

1

ROW 함수가 정수 후보를 만듭니다

INDIRECT 함수로 1행부터 6행까지의 참조를 만들면 ROW 함수가 1~6의 양의 순번을 반환합니다. 여기에 시작값 -2를 반영해 실제 후보 -2~3으로 바꿉니다.

=ROW ( INDIRECT ( "1:"&($C$2-$B$2+1) ) )+$B$2-1 시작값 -2와 종료값 3으로 여섯 후보를 만듭니다.
= {-2;-1;0;1;2;3} 선택할 수 있는 실제 정수 후보입니다.
2

COUNTIF 함수와 NOT 함수가 남은 후보를 표시합니다

E1:E6에는 머리글과 -1, 2, 0, 3, 1이 있습니다. COUNTIF 함수는 후보별 사용 횟수 {0;1;1;1;1;1}을 반환하고, NOT 함수는 아직 나오지 않은 -2의 위치만 TRUE로 바꿉니다.

=NOT ( COUNTIF ( $E$1:E6, {-2;-1;0;1;2;3} ) ) 이미 나온 다섯 값은 FALSE가 됩니다.
= {TRUE;FALSE;FALSE;FALSE;FALSE;FALSE} 첫 번째 후보 -2만 남아 있습니다.
3

양의 순번에서 사용한 위치를 0으로 바꿉니다

실제 후보를 직접 0으로 바꾸면 음수와 0을 정확히 구분할 수 없습니다. 대신 1~6의 양의 순번을 논리 배열과 곱해 남은 첫 번째 순번 1만 유지합니다.

= {1;2;3;4;5;6}*{TRUE;FALSE;FALSE;FALSE;FALSE;FALSE} 사용한 후보의 순번은 0으로 바뀝니다.
= {1;0;0;0;0;0} 남은 후보에 대응하는 양의 순번입니다.
4

LARGE 함수가 순번을 실제 정수로 되돌립니다

남은 후보가 하나이므로 RANDBETWEEN 함수는 1을 반환하고 LARGE 함수도 순번 1을 선택합니다. 여기에 시작값-1을 더하면 실제 후보 -2가 됩니다.

=LARGE ( {1;0;0;0;0;0}, RANDBETWEEN ( 1, 1 ) )+(-2)-1 RANDBETWEEN(1,1)은 항상 1입니다.
= -2 E7 셀에 반환되는 마지막 정수입니다.

02SORTBY + RANDARRAY 공식 (엑셀 2021 이상)

SEQUENCE 함수가 정수 후보를 만들고 SORTBY 함수가 RANDARRAY 함수의 난수 키로 순서를 바꿉니다. 예제 시트의 고정 모드에서는 재현 가능한 키 배열을 대신 사용합니다.

동적 배열 공식 예제 시트에서 G2:G7에 0, 3, -2, 2, 1, -1이 스필되는 계산 과정입니다. 단계마다 강조된 부분이 어떻게 계산되는지 살펴보세요.

1

SEQUENCE 함수가 연속된 정수를 만듭니다

종료값 3에서 시작값 -2를 빼고 1을 더하면 후보 개수는 6입니다. SEQUENCE 함수는 시작값 -2부터 여섯 정수를 세로 배열로 반환합니다.

=SEQUENCE ( D2-C2+1, , C2 ) C2의 -2부터 D2의 3까지 생성합니다.
= {-2;-1;0;1;2;3} 중복 없이 한 번씩 섞을 정수 후보입니다.
2

IF 함수가 검산용 난수 키를 선택합니다

E2가 고정이면 재현 가능한 B2:B7의 키를 사용하고, 생성이면 RANDARRAY 함수가 0 이상 1 미만의 난수 키 여섯 개를 새로 만듭니다.

=IF ( E2="고정", B2:B7, RANDARRAY ( D2-C2+1 ) ) 현재는 고정 모드이므로 B2:B7을 반환합니다.
= {0.42;0.81;0.16;0.67;0.55;0.29} 검산에 사용하는 고정 난수 키 배열입니다.
3

SORTBY 함수가 난수 키 순서로 후보를 섞습니다

SORTBY 함수는 각 후보와 짝을 이룬 키를 오름차순으로 정렬합니다. 고정 키가 작은 순서대로 후보를 배열하면 0, 3, -2, 2, 1, -1이 됩니다.

=SORTBY ( {-2;-1;0;1;2;3}, {0.42;0.81;0.16;0.67;0.55;0.29} ) B2:B7의 고정 난수 키로 정렬 순서를 추적합니다.
= {0;3;-2;2;1;-1} G2:G7에 스필되는 중복 없는 정수 순열입니다.
댓글 13
5 (8개 평가)
칼마르텔
칼마르텔 2020.06.22 20:12
로또번호 추출 공식 감사합니다ㅋㅋㅋㅋ
일등되게 해주세요~.~헤헤
김지영
김지영 2021.01.26 21:50
좋은 정보 감사합니다!
숫자 0이 나오는 경우는 어떻게 하나요?? 분명 시작값을 1로 했는데 숫자 0이 나옵니다. 칸의 갯수도 범위 값보다 작은데 어떻게 해야하나요?
오빠두엑셀
오빠두엑셀 작성자 2021.01.30 11:00
안녕하세요. 공식을 어떻게 사용하셨나요?
적어주신 댓글만으로는 정확한 답변을 드리기가 어렵습니다.
작성하신 예제 파일과 함께 Q&A 커뮤니티로 올려주시겠어요? :)
감사합니다.
감사합니다
감사합니다 2021.10.21 13:28
감사합니다. 랜덤 추첨해야 하는데 예제파일 좀 이용하겠습니다.
예제파일 이외에 따로 식 세워서 만들어보니까 자꾸 오류나서 시간 나면 무엇 때문인지 확인해봐야겠습니다.
감사합니다.
감사합니다. 2021.11.05 13:58
오류 떴었던 이유 뒤늦게 말씀드리러 왔습니다.
본 공식은 배열수식이므로 MS365 버전 사용자가 아닐 경우 Ctrl + Shift + Enter 로 수식을 입력합니다.
이걸 지키지 않아서 오류 떴었습니다. 그냥 엔터로 입력하니까 배열수식 적용이 안되는 거였습니다.
오늘 사용하다가 오류 뜨길래 뭔가 싶었더만 이거 때문이었네요.
감사합니다.
구르마
구르마 2022.02.02 11:14
가로방향으로 생성할경우 0이 나오는 경우가 있는데 무엇이 문제인가요?
오빠두엑셀
오빠두엑셀 작성자 2022.02.06 18:27
구르마님 안녕하세요.
공식이 잘못 작성되어 있었습니다. 죄송합니다.
수식을 아래로 다시 작성 후 사용해보시겠어요?
{ =LARGE(ROW(INDIRECT($시작값&":"&$종료값))*NOT(COUNTIF($시작범위좌측셀:시작범위좌측셀, ROW(INDIRECT($시작값&":"&$종료값)))), RANDBETWEEN(1,$종료값-$시작값+2-COLUMNS($시작범위좌측셀:시작범위좌측셀))) }
문제가 바로 해결되실겁니다..^^
김동건
김동건 2022.02.08 15:45
선생님 너무 감사합니다.
질문이 하나 있습니다. 이게 계속 클릭할때마다 랜덤으로 숫자가 바뀌는데
제가 바꾸고 싶을때만 바꾸는 방법이 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2022.02.08 16:09
안녕하세요.
[파일] - [옵션] - [수식] 에서 계산 방식을 '수동'으로 바꾸신 다음,
바꾸고 싶을 때만 f9 키를 눌러보세요 :)
5프로만
5프로만 2022.08.20 01:38
좋은 강의 감사합니다.
그런데 시작값과 종료값이 매우 큰 값(수천만~수억)인 경우에는 에러가 나는데 왜그런지 설명 부탁 드립니다.
오빠두엑셀
오빠두엑셀 작성자 2022.08.20 02:47
안녕하세요.
수식이 엑셀의 행번호(최대 1,048,576)개 까지만 사용할 수 있어서 그렇습니다.^^
100만개 보다 큰 값의 무작위수는 RANDBETWEEN 함수를 사용해서 처리해보세요.
스야
스야 2024.07.17 15:54
안녕하세요, 해당 공식 활용하려는데 세로 방향 생성 공식을 써도 가로방향으로만 난수가 생성되고, 세로로 드래그 하면 원래 값이랑 똑같은 값이 들어가서 어떻게 해야 할 지 모르겠습니다 ㅠㅠ 엑셀 2010 버전이고 5700개 가량 생성하려 합니다.
+) 지금 보니 그냥 데이터가 많아서 느리게 계산되는 것 같습니다... 좋은 자료 만들어주셔서 감사합니다.
강민준🤗
강민준🤗 2024.08.11 16:58
좋은 강의 감사합니다🙇‍♂️
스크랩 완료