엑셀의 =RAND() 함수를 사용하여, 지정해 준 범위 내에서만 정수의 난수를 구하는 방법입니다. 원래는 0이상 1미만의 실수만 나옵니다.
예를 들어, 30에서 40까지 난수를 출력하려면
=INT((RAND()*(40-30+1))+30)
이렇게 합니다.
그리고 2부터 8까지의 난수만 출력하려면
=INT((RAND()*(8-2+1))+2)
이렇게 합니다.
즉, 공식은
=INT((RAND()*(마지막값-시작값+1))+시작값)
입니다.
엑셀에서, 키보드의 F9 키를 누르면 새로운 난수가 생성됩니다. 셀의 난수 값이 다른 난수 값으로 교체되는 것입니다.
엑셀의 RAND() 함수로, 랜덤한 숫자, 즉, 무작위의 난수를 만들 수 있습니다.
0~9까지의 정수로 난수 발생
=INT(RAND()*10)
1~10까지의 정수로 난수 발생
=INT(RAND()*10) + 1
0과 1사이의, 소수점이 있는 실수로 난수 발생
=RAND()
위의 수식들을 셀에 기입하면 랜덤한 숫자가 출력됩니다.
엑셀에서, 키보드의 F9 키를 누르면, 모든 난수들이 다른 난수로 변경됩니다. (다른 시트들의 랜덤 함수들도 변경됨)
원래 RAND() 함수는, 정수(0, 1, 2, 3...)가 아닌 실수(0.12345 등)를 반환하는데, 실무에서는 정수로 된 난수가 주로 사용되기에, INT() 함수를 사용해 정수로 변환해 주어야 합니다. INT() 함수는 실수를 정수로 반올림하는 것이 아니라, "내림"을 하여 정수로 만듭니다. RAND() 함수에는 반올림이 필요없고 INT() 함수면 충분합니다.
RAND() 함수가 있는 엑셀 시트는, 아무것도 변경하지 않고 닫으려고 해도, 문서가 변경되었다며 저장할까요? 라는 메시지가 나옵니다. 문서를 열 때마다 RAND() 함수가 만드는 값이 달라지기 때문입니다.
그런데 VBA 즉 비베 프로그래밍에서는 Rnd 함수를 사용하여 랜덤 숫자를 만듭니다. 여기에 예제가 있습니다: ▶▶ 엑셀/Excel] VBA의 Rnd 함수로, 1에서 100까지의 랜덤 숫자 만들기
특정 범위의 난수 구하기: ▶▶ Excel 엑셀, 지정한 범위의 난수 값 생성, 특정 범위 내에서 랜덤 발생; Random Range
▶▶ [엑셀/Excel] 실수를 반올림하여 정수로; 소수점 특정 자리에서 반올림하는 함수 - ROUND
정수 난수 발생기: ▶▶ 난수 발생기; 랜덤 정수 생성, 무작위 숫자 발생; Random Int Number Generator
VBA를 비롯한 베이직 계열의 언어에서는 Rnd 함수로 랜덤 숫자 즉 난수를 발생시킵니다. 엑셀 함수인 RAND() 와는 전혀 다른 별개의 함수입니다.
엑셀의 RAND() 함수와는 달리, 비베의 Rnd 함수는 반드시 Randomize 라는 구문을 사용해야 합니다. 그렇지 않으면 무작위의 숫자가 나오지 않고 항상 같은 수(0.705547512 또는 0.705547511577606)가 나옵니다. Randomize 는 Rnd 앞에서 딱 1번만 사용해야 하고 루프 속에 넣으면 안됩니다.
문서를 열 때마다 값이 달라지는 엑셀의 RAND()와는 달리, VBA의 Rnd 함수는 결과값이 셀에 고정되어 있습니다. 왜냐하면 셀에 랜덤 함수가 직접 들어가는 것이 아니라, 값만 들어가기 때문입니다. 물론 VBA 를 다시 실행하면 값이 갱신됩니다.
비베의 Rnd 함수로, 랜덤 숫자 만들기 예제
Randomize
Dim R, C
For R = 1 To 30
For C = 1 To 10
Cells(R, C).Value = Int(Rnd * 100) + 1
Next C
Next R
End Sub
실행시키면 A1 ~ J30 범위의 셀들이, 1에서 100까지의 무작위의 정수로 채워집니다.
Rnd 함수는, 0~1까지의 실수를 반환하기에, 1에서 100까지의 결과를 얻으려면
Int(Rnd * 100) + 1
이렇게 해야 합니다.
'메모' 카테고리의 다른 글
머리글행 선택시 정렬할때 머리글 행의 이름으로 정렬 지정할수 있음...펌. (0) | 2009.12.30 |
---|---|
엑셀함수 =round(1.2345,2)...소수점자리... (0) | 2009.12.30 |
법인등록번호, 주민등록번호, 사업자등록번호...펌 (0) | 2009.12.29 |
SIS DB 백업과 복구 방법... (0) | 2009.12.29 |
검진프로그램 개발업체...펌 (0) | 2009.12.28 |