엑셀 고유 번호 생성 :: RandBetweenUnique 함수 사용법

엑셀 두 숫자 사이의 무작위 고유값을 배열로 생성하는 RandBetweenUnique 함수의 사용법을 알아봅니다.

홈페이지 » 엑셀 고유 번호 생성 :: RandBetweenUnique 함수 사용법

엑셀 고유 번호 생성 :: 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개의 고유숫자를 무작위로 반환합니다.

예제파일 다운로드

상세 설명

엑셀 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. 1과 10사이의 숫자 중 3개의 무작위 엑셀 고유 번호 생성
    =RANDBETWEENUNIQUE(1,10,3)
    ={3,6,10}  ' 1과 10사이의 숫자 중 고유번호 3개를 반환합니다.
  2. 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
명령문 동작원리 단계별 알아보기
  1. 변수를 설정합니다.
    ' 변수 설정
    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")
  2. 배열(또는 범위)로 받아온 제외값을 Dictionary 개체로 변환합니다.
    ' 제외값 설정
    If Not IsMissing(Excludes) Then
        For Each Exclude In Excludes
            If Not dictExclude.Exists(Exclude) Then dictExclude.Add Exclude, Exclude
        Next
    End If
  3. 추출 개수가 실제 반환가능한 개수보다 클 경우, 실제 반환가능한 개수로 배열의 크기를 조정합니다.
    ' 추출개수가 최대개수보다 클 경우 추출개수 재조정
    If Count > lngU - lngL + 1 - dictExclude.Count Then Count = lngU - lngL + 1 - dictExclude.Count
  4. 무작위 값을 생성합니다.
    ' 무작위 값 생성
    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
  5. 생성된 배열을 결과값으로 반환합니다.
    '결과값 반환
    RandBetweenUnique = dictList.Items
5 2 votes
게시글평점
현재 페이지 댓글알림 신청
알림 설정
guest
2 Comments
Inline Feedbacks
View all comments
SEANPAUL
SEANPAUL
2020년 8월 16일 7:04 오후
게시글평점 :
     

딱 필요한 기능이었어요. 감사해요

iviolin
iviolin
2020년 8월 17일 10:34 오전
게시글평점 :
     

와 정말 대단합니다... 한 수 배워갑니다.

2
0
여러분의 생각을 댓글로 남겨주세요.x