안녕하세요.

 

이번 강좌에서 소개할 함수는 RAND 함수와 RANDBETWEEN 함수 입니다.

 

질문하거나 언급되는 경우가 많지 않은 것을 보면 업무에서 아주 많이 쓰이는 함수는 아닌 것 같습니다.

어쩌다 한 번씩 쓰이는 경우가 있고, 재미로 사용해 볼 수 있는 함수라 생각해서 소개합니다.

게임을 개발하는 경우엔 꼭 필요한 동작을 하는 함수입니다.

 

RAND 함수는 인수 없이 그냥 함수이름과 괄호만 입력하면 되고, 역할은 0과 1 사이의 소수값을 임의로 나타냅니다.

RANDBETWEEN 함수는 Bottom, Top 두 개의 인수가 있고, Bottom은 작은 값, Top은 큰 값으로 두 값 사이 임의의 정수를 나타내 줍니다.

 

예제 파일을 가지고 직접해 보죠.

 

실습 파일 다운로드

Rand함수_실습파일.xlsx
0.02MB

 

거래 내역이 기록된 파일입니다.

지금은 일자 필드를 기준으로 정렬되어 있는데, 정렬 기능을 소개하기 위해 적당히 흩어져 있도록 만들려고 합니다.

이런 작업이 필요한 일을 하는 사람이 누군지 아시겠죠?

 

거래지점 필드나 단가 필드등 정렬 기준으로 사용할 필드를 제외한 다른 필드를 기준으로 정렬하면 흩트러진 모습을 보일 수 있지만 한 눈에 딱 봐도 다른 기준으로 정렬된게 보이므로 어색해 보입니다.

또는 수작업으로 직접 행을 선택해서 옮겨 놓을 수 있긴 합니다.

 

잠깐만 생각해 봐도 잘 안되겠죠?

다행히 예제로 사용한 파일은 4행부터 123행까지 120줄짜리 예제이므로 인내심을 가지고 옮겨 본다고 해도 직접 옮기다 보면 덜 섞일 수 밖에 없습니다.

 

그럼 해 보겠습니다.

 

[K3] 셀에 '임시'라고 필드명을 적습니다.

나중에 이 필드를 기준으로 정렬을 할거라서 필드명이 있는게 좋습니다.

서식은 신경쓸 필요없습니다.

정렬을 위해 사용한 뒤 지워버릴 예정이기 때문입니다.

 

[K4] 셀에 커서를 두고 =ran 까지 입력하면 함수 목록이 나타납니다.

RAND를 선택하고 <Enter>를 누릅니다.

임의의 소수가 표시됩니다.

나타난 숫자는 아무 의미 없습니다.

0과 1 사이의 아무 소수나 나온 거죠.

이 숫자는 고정된 것도 아닙니다.

다른 셀에도 값을 구하기 위해 채우기 할텐데 채우기를 실행하면 값이 바껴 버립니다.

수식이 고쳐질 때마다 다시 실행되기 때문이죠.

 

[K4] 셀에 커서를 두고 채우기 핸들을 더블클릭해 나머지 셀에도 값을 채웁니다.

처음에 [K4] 셀에 표시되던 값이 바뀐걸 아시겠죠?

 

RAND 함수로 구해진 값은 아무 의미가 없습니다.

 

본래 목적인 임의로 섞는 정렬을 하죠.

K열 어디나 둬도 상관없지만 필드명이 있는 [K3] 셀에 커서를 두고 [데이터] 리본 [정렬 및 필터] 그룹 [텍스트 오름차순 정렬] 항목을 클릭합니다.

 

정렬 순서가 무작위로 섞였습니다.

 

이제 필요없는 K열은 삭제합니다.

K 열문자를 클릭하고 마우스 오른쪽 클릭해 [삭제]를 선택합니다.

이렇게 해서 자연스럽게 흩트러진 데이터를 준비했습니다.

 

a와 b 사이 임의의 소수를 구하려면 

=RAND()*(b-a)+a

수식을 이용하면 됩니다.

 

a와 b 사이 임의의 정수를 구하려면

=INT(RAND()*(b-a)+a)

수식을 이용합니다.

 

INT 함수로 소수 부분은 없애고 정수 부분만 표시하는거죠.

 

임의의 정수를 구하는 경우라면 RANDBETWEEN 함수를 이용할 수 있습니다.

엑셀 2007 버전 이후에 추가된 함수라서 만약 예전 버전이라면 INT와 RAND 함수를 중첩해 사용해야 합니다.

 

강의를 하다보면 한 번씩 듣는 질문 중에 하나가 개인정보보호에 대한 이야기 입니다.

 

실습파일에 전화번호나 주민등록번호 같은 것에 대한 이야기죠.

 

실습파일에서 사용하는 전화번호나 주민등록번호는 다 가짜입니다.

일정한 형식으로 임의의 수를 생성해 만든 겁니다.

 

한 번 해 보죠.

 

새 시트를 하나 추가합니다.

시트 탭에서 [새 시트] 단추를 누릅니다.

전화번호를 만들어 보죠.

 

위키피디아에서 전화번호 체계를 확인할 수 있습니다.

https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8_%EC%B2%B4%EA%B3%84

 

대한민국의 전화번호 체계 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 대한민국의 전화번호 체계는 방송통신위원회 고시 전기통신번호관리세칙 제2장에 따라 규정되었다. 국제전화 나라 번호(국가�

ko.wikipedia.org

앞은 010으로 고정하고 국번은 2000~9999 사이의 숫자, 번호는 0001~9999 사이의 숫자로 만들겠습니다.

 

만들어진 전화번호를 합쳐 하나의 문자열로 만들기 위해 CONCATENATE 함수를 사용합니다.

 

[A1] 셀에 커서를 두고 =con 까지 입력하면 사용할 CONCATENATE 함수가 보입니다.

함수를 더블클릭하고 <Shfit + F3>키를 누르거나 수식입력줄 함수 삽입 단추를 눌러 함수 삽입창을 띄웁니다.

Text1에는 '010-'를 입력합니다.

Text2에 RANDBETWEEN 함수를 사용하는데, 함수 삽입 창은 한 번에 하나의 함수에 대해 창을 표시하므로 먼저 'randbetween()'를 입력합니다.

합수 삽입 창에서는 함수명을 자동으로 보여주지 않으므로 직접 입력을 해야 합니다.

 

수식입력줄에 방금 입력한 'randbetween()' 글자를 마우스로 클릭합니다.

이제 RANDBETWEEN 함수 입력 창으로 바뀝니다.

나중에 작성한 뒤 다시 CONCATENATE 함수 입력 창으로 전환하려면 수식입력줄에서 CONCATENATE 함수 글자 부분을 클릭하면 됩니다.

[확인] 단추를 누르면 안되는데, 아직 함수 작성 작업이 완성된게 아니기 때문입니다.

 

Bottom에 2000을 입력하고, Top에는 9999를 입력합니다.

수식입력줄에서 CONCATENATE 글자를 클릭해서 함수 입력 창을 전환합니다.

Text3에 전화번호 사이를 이어주는 '-'를 입력합니다.

마지막 인수 Text4는 조금 복잡해 지는데, RANDBETWEEN에는 0, 9999를 넣을 겁니다.

그런데 전화번호가 '53'이 나왔다면 그냥 '53'이면 안되고 '0053'이 되어야 합니다.

 

임의로 구해진 숫자를 4자리로 만들어야 합니다.

가장 작은 숫자가 나올 때 '0'이기 때문에 앞에 '000'을 붙입니다.

그리고 만들어진 숫자에서 오른쪽 기준으로 4자리만 잘라서 가져오면 우리가 원하는 형태의 숫자가 만들어 집니다.

 

'53'이 나왔을 때 앞에 '000'을 붙이면 '00053'이 되고, 오른쪽에서 4자리만 자르면 '0053'이 되는거죠.

 

문자열 처리를 하다보면 흔히 하는 작업 중 하나입니다.

 

문자열 합치기RIGHT 함수를 이용하면 됩니다.

 

Text4에 먼저 right()를 입력합니다.

그리고 수식입력줄에서 right() 글자를 눌러 RIGHT 함수 입력 창으로 전환합니다.

나머지는 Text에 바로 입력해서 만듭니다.

"000" & randbetween(0, 9999)

Num_chars에는 4를 입력하고 수식입력줄 CONCATENATE 글자를 클릭해 함수 입력 창을 전환합니다.

이제 [확인] 단추를 누릅니다.

 

만들어진 가짜 전화번호가 표시됩니다.

=CONCATENATE("010-",RANDBETWEEN(2000,9999),"-",RIGHT("000" & RANDBETWEEN(0, 9999),4))

수식을 실행할 때마다 전화번호가 계속 바뀝니다.

여러 개가 필요하면 채우기 해서 만들면 됩니다.

 

임의의 숫자가 표시된 것이라 중복된 경우도 있을 수 있습니다만 그럴 경우는 거의 없죠.

만약 중복된 번호가 있어서는 안된다면 [데이터] 리본 [중복된 항목 제거]를 이용해 없앨 수 있습니다.

 

RAND나 RANDBETWEEN 함수를 알게 되면 꼭 1~45 사이 숫자 6개를 만들어 보고 싶어지죠?

로또 숫자죠!

 

물론 당첨과는 아무런 관계 없습니다.

 

필요하신 분들께 도움이 되시길 바라며 강좌는 마치겠습니다.

수고하셨습니다.

+ Recent posts