엑셀 고유 번호 생성 :: RandBetweenUnique 함수 사용법 총정리
엑셀 RandBetweenUnique 함수 목차 바로가기
요약
엑셀 RandBetweenUnique 함수는 두 숫자 사이의 무작위 고유값을 지정한 갯수만큼 배열로 반환하는 함수입니다. 예를들어, =RANDBETWEENUNIQUE(1,100,5) 를 입력하면 1과 100사이의 겹치지 않는 5개 숫자를 무작위로 반환합니다.
명령문 구문
= RANDBETWEENUNIQUE ( 최소값, 최대값, 개수, [제외값] )
사용된 인수 및 변수 알아보기
인수 | 설명 |
최소값 [Long] |
추출할 숫자의 최소값입니다. |
최대값 [Long] |
추출할 숫자의 최대값입니다. |
개수 [Long] |
추출할 고유숫자의 개수입니다. 최소값과 최대값 사이의 숫자개수보다 큰 값이 입력될 경우, 두 숫자 사이의 개수 만큼만 배열로 반환됩니다. 예를들어, =RANDBETWEENUNIQUE(1,5,10) 을 입력할 경우, 개수로 10이 입력되었지만 1과 5사이의 숫자 개수는 5개이므로 결과적으로 5개의 숫자만 배열로 반환됩니다. 제외값이 입력될 경우, 반환가능한 최대 개수는 "최대값-최소값-제외값개수+1" 입니다. |
제외값 [Variant, 선택인수] |
추출할 숫자 중 제외될 값을 배열 또는 범위로 입력합니다. 예를들어, =RANDBETWEENUNIQUE(1,100,5,{10,20,30}) 을 입력하면, 1과 100사이의 숫자 중 {10,20,30}을 제외한 5개의 고유숫자를 무작위로 반환합니다. |
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [엑셀VBA함수] RANDBETWEENUNIQUE 함수예제파일
상세 설명
엑셀 RANDBETWEENUNIQUE 함수는 두 숫자 사이의 무작위 고유 숫자를 지정한 갯수만큼 생성하는 사용자 지정함수입니다. 최소값/최대값 이외에 '제외값'이 인수로 추가되어 반환되지 말아야 할 숫자도 추가로 지정할 수 있습니다.
RANDBETWEENUNIQUE 함수로 반환되는 숫자의 최대 개수는 '최대값-최소값-제외값개수+1' 개 입니다.
예를들어, =RANDBETWEEN(1,10,10,{1,3,5,7,9}) 를 입력하면 "1과 10사이의 숫자 중 {1,3,5,7,9}를 제외한 고유숫자 10개를 반환하라는 명령'이 들어가지만, 1과 10사이에서 제외값인 {1,3,5,7,9}를 빼면 실제 반환가능한 숫자는 "10-1-5+1"개이므로 총 5개의 숫자만 반환됩니다.
실전 사용 예제
- 1과 10사이의 숫자 중 3개의 무작위 엑셀 고유 번호 생성
=RANDBETWEENUNIQUE(1,10,3)
={3,6,10} ' 1과 10사이의 숫자 중 고유번호 3개를 반환합니다. - 1과 30사이의 숫자 중, {7,17,27}을 제외하고 5개의 고유 번호를 무작위로 생성하기
=RANDBETWEENUNIQUE(1,30,5,{7,17,27})
={3,11,19,21,27} '1과 10사이의 숫자 중 {7,17,27}를 제외한 고유번호 5개를 반환합니다.
엑셀 고유번호 생성, RandBetweenUnique 명령문 동작원리
RandBetweenUnique 명령문 전체 코드
'############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ RandBetweenUnique 함수 '▶ 두 숫자 사이의 무작위 고유 숫자를 지정한 갯수만큼 생성하여 배열로 반환합니다. '▶ 인수 설명 '_____________lngL : 추출할 숫자의 최소값입니다. '_____________lngU : 추출할 숫자의 최대값입니다. '_____________lngCount : 추출할 고유숫자의 개수입니다. '_____________Excludes : 추출할 숫자 중 제외될 값이 입력된 배열 또는 범위입니다. '############################################################### Function RandBetweenUnique(lngL As Long, lngU As Long, Count As Long, Optional Excludes As Variant) As Variant ' 변수 설정 Dim dictList As Object: Dim dictExclude As Object Dim Exclude As Variant Dim i As Long: Dim j As Long Set dictList = CreateObject("Scripting.Dictionary") Set dictExclude = CreateObject("Scripting.Dictionary") ' 제외값 설정 If Not IsMissing(Excludes) Then For Each Exclude In Excludes If Not dictExclude.Exists(Exclude) Then dictExclude.Add Exclude, Exclude Next End If ' 추출개수가 최대개수보다 클 경우 추출개수 재조정 If Count > lngU - lngL + 1 - dictExclude.Count Then Count = lngU - lngL + 1 - dictExclude.Count ' 무작위 값 생성 Do j = CLng(Rnd * (lngU - lngL)) + lngL If Not dictList.Exists(j) And Not dictExclude.Exists(j) Then dictList.Add j, j i = i + 1 End If Loop Until i = Count '결과값 반환 RandBetweenUnique = dictList.Items End Function
명령문 동작원리 단계별 알아보기
- 변수를 설정합니다.
' 변수 설정 Dim dictList As Object: Dim dictExclude As Object Dim Exclude As Variant Dim i As Long: Dim j As Long Set dictList = CreateObject("Scripting.Dictionary") Set dictExclude = CreateObject("Scripting.Dictionary")
- 배열(또는 범위)로 받아온 제외값을 Dictionary 개체로 변환합니다.
' 제외값 설정 If Not IsMissing(Excludes) Then For Each Exclude In Excludes If Not dictExclude.Exists(Exclude) Then dictExclude.Add Exclude, Exclude Next End If
- 추출 개수가 실제 반환가능한 개수보다 클 경우, 실제 반환가능한 개수로 배열의 크기를 조정합니다.
' 추출개수가 최대개수보다 클 경우 추출개수 재조정 If Count > lngU - lngL + 1 - dictExclude.Count Then Count = lngU - lngL + 1 - dictExclude.Count
- 무작위 값을 생성합니다.
' 무작위 값 생성 Do j = CLng(Rnd * (lngU - lngL)) + lngL If Not dictList.Exists(j) And Not dictExclude.Exists(j) Then dictList.Add j, j i = i + 1 End If Loop Until i = Count
- 생성된 배열을 결과값으로 반환합니다.
'결과값 반환 RandBetweenUnique = dictList.Items
- 1과 10사이의 숫자 중 3개의 무작위 엑셀 고유 번호 생성