본문 바로가기
dev/webDev

엑셀 EXCEL 에서 영문자 숫자 난수를 출력하기.

by Kelvin™ 2018. 3. 25.

이벤트를 하다보면 난수를 찾아야 하는 경우가 있다.  

이럴때 엑셀을 이용해서 난수를 출력하는 방법에 대해서 알아본다.


  1. 엑셀에서의 난수를 출력하는 방법.
    엑셀에서의 난수를 출력하는 가장 기본적인 방법은 RAND() 함수이다. 이 함수를 소수점 이하의 자리를 이용해서 난수를 출력한다.
    그러나 우리가 필요한 난수는 소수점 이하자리가 아닐 것이다.



  2. 소수점을 없애자.
    이것을 그냥 정수형으로변경을 하게되면. =INT(RAND()) RAND 로 생성된 결과수를 소수점 이하이므로 어떻게 하더라도 0으로만 표시된다. 그럼 어떻게 해야할까? 생각해보자.. ^^



  3. 간단(?)하게 RAND() 결과물에 *10 을 하면 원하는 결과인 정수형 값을 얻을 수 있다. =INT(RAND()*10)
    그런데 이 작업은 단순하게 0부터 9까지의 난수를 표현할 수 밖에 없다.
    그럼 또 어떻게 해야할까. 엑셀은 그것을 이룰수 있게 해준다.  ^^



  4. RAND 보다 더 나은 함수 RANDBETWEEN() 이다.
    이 함수는 인수 두개 사이의 값을 출력해준다. 예를 들어 RAND(BETWEEN(1,10)) 는 1부터 10 사이의 값에서 난수를 생성해달라는 뜻이다.  자 그럼 난수를 어떻게 만들어야 할까.



  5. 아스키 코드값을 알아보자. 보통의 난수는 단순하게 숫자의 조합이 아니다. ( 물론 숫자만으로도 만들지 - 휴대폰 인증번호 같은 )
    약간은 더 복잡하게 만들어야 할 필요가 있을 경우 영문자와 숫자의 조합으로 랜덤문자를 생성한다.
    내 경우는 영문자대문자+ 소문자+숫자의 조합으로 만들고 싶다.
    그러면 난수를 어떻게 생성해야 할까라는 의문이 생긴다.
    아스키 코드값은 우리가 사용하는 다양한 문자의 숫자값을 제시해준다. 이 숫자들을 엑셀의 CHAR 함수로 호출하면 해당 수에 대한 문자를 생성해 준다.



  6. 아스키코드와 난수를 이용한 출력.
    아래에 각 문자에 대한 아스키 코드값을 적어두었다.
    0-9 는 아스키 코드값 48 ~ 57
    a-z 는 아스키 코드값 65 ~ 90
    A-Z 는 아스키 코드값 97 ~ 122
    로 표시해 줄수 있다. 이 값을 기준으로 난수를 만들어서 char 로 감싸면 아래의 결과가 나온다.
    이렇게 하면 한 자리의 난수를 표시하는데는 문제가 없어진다.

    그런데 여기서의 또 다른 의문. 난수가 영문대문자일수도있고, 소문자일수도 있고 , 숫자일수도 있는 난수를 만들고 싶은데, 각각의 숫자는 떨어져 있는 상태이다. between 으로만으로는 힘들다.



  7. 원하는 바 : 각 자릿수별로 숫자와 영문자중에 선택되는 난수를 어떻게 선택할까.  그래서 이 부분에 EXCEL 의 switch 구문을 이용했다.
    switch 구문은 다음과 같다.
    switch(조건,조건첫번째값,실행내용,조건두번째값,실행내용..... )
    이걸 응용하면 
    switch(1과 3중에 하나 , 1일경우 영문대문자,2일경우 숫자, 3일 경우 영문소문자) 를 표시하게 해주면 될것이다.
    그에 대한 내용이 아래의 이미지이며..



  8. 이것의 결과로 3자리의 난수를 만들고 싶다면 아래의 내용을 셀에 입력하면 된다.

    =SWITCH(RANDBETWEEN(1,3),1,CHAR(RANDBETWEEN(65, 90)),2,CHAR(RANDBETWEEN(48, 57)),3,CHAR(RANDBETWEEN(97, 122)))&SWITCH(RANDBETWEEN(1,3),1,CHAR(RANDBETWEEN(65, 90)),2,CHAR(RANDBETWEEN(48, 57)),3,CHAR(RANDBETWEEN(97, 122)))&SWITCH(RANDBETWEEN(1,3),1,CHAR(RANDBETWEEN(65, 90)),2,CHAR(RANDBETWEEN(48, 57)),3,CHAR(RANDBETWEEN(97, 122)))