1일1함수 (46) RAND, RANDBETWEEN함수 : 난수발생시키기

엑셀 2003에서 사용하던 난수 발생함수로 RAND함수가 있습니다. 인수가 필요없이 RAND()라고 입력하기만하면, 0에서 1사이의 실수를 반환합니다. 그래서 80과 100사이의 정수를 난수로 발생시키려면 다음과 같은 수식을 사용했습니다.

=INT(RAND()*(100-80)+80)

수식을 분석하면, RAND()부분에서는 0에서 1사이의 실수가 반환되고
거기다 20을 곱하면 0과 20 사이의 실수가 됩니다.
거기다 80을 더하면 80과 100사이의 실수가 되고
그 값에 INT함수를 적용시키면 80과 100사이의 정수가 됩니다.

참고: INT함수는 가장 가까운 정수로 내림하는 함수입니다.
INT(8.9) = 8
INT(-8.9) = -9 

그런데, 엑셀2007에서는 이렇게 복잡하게 할 필요없이 RANDBETWEEN함수를 사용하면 됩니다. 
80에서 100사이의 난수를 발생시키는 수식은 다음과 같습니다.

=RANDBETWEEN(80,100)


RAND함수를 이용하는 예를 하나 보여드리겠습니다. 학생들을 번호순이 아니라 무작위로 섞은 새로운 순번을 부여하고 싶습니다. 


C열에는 RAND함수를 이용해서 난수를 발생시키고

D열에는 생성된 C열의 난수값으로 순번을 매기는 함수를 넣습니다.
=RANK(C2,$C$2:$C$11)


그런데 해보시면 아시겠지만, RAND함수는 셀에 변화가 있을때마다 난수값을 새로 발생시킵니다. 엔터하나만 쳐도 전체 셀의 값이 달라지는 겁니다. 그래서 지금 발생시킨 난수 및 순번을 그대로 고정시켜야합니다. 셀의 전체 범위를 선택하여


복사하신후, 같은 셀범위에 오른쪽 클릭하여


선택하여 붙여넣기를 실행하면 창이 뜹니다.


여기서 "값"을 선택하고 확인하면


이제는 난수가 더이상 새로 생성되지 않고 셀값이 고정됩니다. 아까 RAND함수가 들어있던 C열을 클릭해보면 RAND함수가 아니라 0에서1사이의 실수가 들어있습니다.

혹시라도, 이렇게 복잡하게 하지 않고 RANDBETWEEN함수를 이용하여

=RANDBETWEEN(1,10)

하면 1에서 10사이의 정수가 무작위로 추출될테니까 그것을 새로운 순번으로 사용하면 되지 않나하는 생각이 드실지도 모르겠습니다. 하지만 실제로 어떻게 되는지 한번 실험해 보세요. 숙제입니다^^

2009/03/19 - [컴퓨터/엑셀] - 1일1함수(3) : 순위 매기기 rank 함수

댓글

이 블로그의 인기 게시물

중복된 텍스트 제외하고 고유 텍스트 개수 세기

1일1함수 (12) sumproduct함수 - 동점일때 다른 기준으로 순위매기기

한 폴더 안의 모든 파일에서 특정 시트 복사해오는 vba