엑셀 두 숫자사이 값 중복없이 랜덤 생성 :: 액셀함수공식

두 숫자를 지정하여 두 수 사이에 있는 값을 중복없이 랜덤으로 생성하는 공식의 사용법 및 동작원리를 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2022. 02. 06. 18:27
URL 복사
메모 남기기 : (13)

엑셀 두 숫자 사이 값 중복없이 랜덤 생성 공식

엑셀 두 숫자사이 값 중복없이 랜덤 생성 목차 바로가기
함수 공식
  1. 세로방향으로 생성 할 경우
    { =LARGE(ROW(INDIRECT($시작값&":"&$종료값))*NOT(COUNTIF($시작범위윗셀:시작범위윗셀, ROW(INDIRECT($시작값&":"&$종료값)))), RANDBETWEEN(1,$종료값-$시작값+2-ROWS($시작범위윗셀:시작범위윗셀))) }
  2. 가로방향으로 생성 할 경우
    { =LARGE(ROW(INDIRECT($시작값&":"&$종료값))*NOT(COUNTIF($시작범위좌측셀:시작범위좌측셀, ROW(INDIRECT($시작값&":"&$종료값)))), RANDBETWEEN(1,$종료값-$시작값+2-COLUMNS($시작범위좌측셀:시작범위좌측셀))) }

본 공식은 배열수식이므로 MS365 버전 사용자가 아닐 경우 Ctrl + Shift + Enter 로 수식을 입력합니다.

인수 설명
두 숫자 사이 값 중복없이 출력 인수 예제
두 숫자 사이값을 중복없이 불러오는 공식에 사용된 인수
인수 설명
$시작값 중복 없이 랜덤으로 생성할 숫자의 시작 값(최소값) 입니다. 다른 셀을 참조할 경우 반드시 절대참조로 입력하는 것에 주의합니다. 셀 참조 대신 숫자를 바로 입력할 수도 있습니다.
$종료값 중복 없이 랜덤으로 생성할 숫자의 마지막 값(최대값) 입니다. 다른 셀을 참조할 경우 반드시 절대참조로 입력하는 것에 주의합니다. 셀 참조 대신 숫자를 바로 입력할 수도 있습니다.
$시작범위윗셀:시작범위윗셀
$시작범위좌측셀:시작범위좌측셀
숫자를 생성할 범위를 기준으로, 범위가 시작되는 셀의 위쪽 또는 왼쪽 셀 주소입니다. 범위형태로 입력하며 범위의 시작셀은 반드시 절대참조로 입력하는 것에 주의합니다.

예를들어, A2:A10 범위에 세로방향으로 숫자를 생성할 경우, [ $A1:A1 ] 으로 입력합니다.


예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [엑셀공식] 두 숫자 사이 값 중복없이 랜덤 생성
    예제파일

호환성
운영체제 호환성
Windows 버전 모든 엑셀 버전에서 사용 가능합니다.
Mac 버전 모든 엑셀 버전에서 사용 가능합니다.
사용된 기초 함수

엑셀 두 수 사이 값 중복없이 랜덤 생성 공식 알아보기

공식 설명

두 숫자를 지정하여 두 수 사이에 있는 값을 중복없이 랜덤으로 생성하는 공식입니다. 기본적으로 두 '정수' 사이의 값을 랜덤으로 생성할 수 있으며, 공식의 첫번째 값인 ROW 함수를 조금만 변경하면 소숫점자리의 숫자도 생성가능합니다. 공식은 아래와 같습니다.

=LARGE((ROW(INDIRECT($시작값&":"&$종료값)))/10*NOT(COUNTIF($시작범위윗셀:시작범위윗셀, ROW(INDIRECT($시작값&":"&$종료값)))), RANDBETWEEN(1,$종료값-$시작값+2-ROWS($시작범위윗셀:시작범위윗셀)))
'$시작값과 $종료값이 각 1과 10일 경우, 0.1~1 사이의 값을 랜덤으로 생성합니다.

해당수식은 배열수식이므로 MS 365 사용자가 아닐 경우, 반드시 Ctrl + Shift + Enter 로 수식을 입력해야 하는 것에 주의합니다.

공식의 동작원리
  1. ROW 함수의 인수로 범위를 입력하면, 범위의 행 번호(숫자)가 배열로 반환됩니다.
    =ROW(INDIRECT($시작값&":"&$종료값))
    =ROW(INDIRECT($1&":"&$10))
    =ROW(INDIRECT($1:$10))
    ={1,2,3,4,5,6,7,8,9,10}
  2. COUNTIF 함수와 확장범위($셀:셀)을 사용하여 범위에 중복되는 값이 있는지 여부를 확인합니다. 기준셀 이전에 중복되는 값이 있을 경우 COUNTIF 함수는 0보다 큰 수를 반환합니다.
    =COUNTIF($시작범위윗셀:시작범위윗셀, ROW(INDIRECT($시작값&":"&$종료값)))
    =COUNTIF($A1:A1,ROW($1:$10))
    =COUNTIF($A1:A1,{1,2,3,4,5,6,7,8,9,10})
    =COUNTIF({머릿글},{1,2,3,4,5,6,7,8,9,10})
    ={0,0,0,0,0,0,0,0,0,0}   'A1셀에는 중복되는 값이 없으므로 모두 0을 반환합니다.
    '셀이 아래로 한칸 자동채우기 되었고, 윗셀에 값으로 4가 반환되었다고 가정하면 공식은 아래와 같이 동작합니다.
    =COUNTIF($A1:A2,{1,2,3,4,5,6,7,8,9,10})
    =COUNTIF({머릿글,4},{1,2,3,4,5,6,7,8,9,10})
    ={0,0,0,1,0,0,0,0,0,0}  ' 범위에 4가 있으므로 네번째 값이 1로 반환됩니다.
  3. NOT 함수를 사용하여 1은 FALSE로, 0은 TRUE로 변환합니다.
    =NOT(COUNTIF($시작범위윗셀:시작범위윗셀, ROW(INDIRECT($시작값&":"&$종료값)))
    =NOT({0,0,0,1,0,0,0,0,0,0})
    ={TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE}
  4. 1번에서 구한 숫자범위와 NOT 함수로 계산된 논리값을 곱하면 중복값을 제외한 값만 반환됩니다.
    ={1,2,3,4,5,6,7,8,9,10}*{TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE}
    ={1,2,3,0,5,6,7,8,9,10}
  5. RANDBETWEEN 함수로 두 정수 사이의 값을 랜덤으로 생성합니다.
    =RANDBETWEEN(1,$종료값-$시작값+2-ROWS($시작범위윗셀:시작범위윗셀))
    =RANDBETWEEN(1,10-1+2-ROWS($A1:A1))
    =RANDBETWEEN(1,10-1+2-1)
    =RANDBETWEEN(1,10)  ' 1과 10 사이의 정수를 랜덤으로 생성합니다.
    ' 셀이 아래로 한칸 자동채우기 될 경우, 공식은 아래와 같이 동작합니다.
    =RANDBETWEEN(1,10-1+2-ROWS($A1:A2))
    =RANDBETWEEN(1,10-1+2-2)
    =RANDBETWEEN(1,9)  ' 1과 9사이의 정수를 랜덤으로 생성합니다.
  6. 최종적으로 LARGE 함수를 사용하여 두 사이의 값을 중복없이 랜덤으로 생성합니다.
    '두번째 값을 생성하는 것을 예제로 알아봅니다.
    =LARGE(ROW(INDIRECT($시작값&":"&$종료값))*NOT(COUNTIF($시작범위윗셀:시작범위윗셀, ROW(INDIRECT($시작값&":"&$종료값)))), RANDBETWEEN(1,$종료값-$시작값+2-ROWS($시작범위윗셀:시작범위윗셀)))
    =LARGE({1,2,3,0,5,6,7,8,9,10},RANDBETWEEN(1,9))  ' 범위 내 n번째로 큰 수를 랜덤으로 추출합니다.
    =LARGE({1,2,3,0,5,6,7,8,9,10},{4}) ' RANDBETWEEN 함수로 4가 반환되었고, 범위내에서 4번째로 큰 수를 추출합니다.
    =7  ' 7이 반환됩니다.
5 8 투표
게시글평점
13 댓글
Inline Feedbacks
모든 댓글 보기
13
0
여러분의 생각을 댓글로 남겨주세요.x