자료실

부자는 돈을 써서 시간을 아끼지만 가난한 사람은 시간을 써서 돈을 아낀다

vb6.0/vba

IT HUB를 찾아주셔서 감사합니다.

vb6.0vba [vba] Excel에서의 Randomize 함수: 무작위 값 생성의 비밀 해제

페이지 정보

profile_image
작성자 하나를하더라도최선을
댓글 0건 조회 2,413회 작성일 23-11-15 13:17

본문

엑셀을 사용하면서 랜덤한 값을 생성해야 할 때, 가끔씩 동일한 값만이 반복되는 현상을 경험한 적이 있을 것입니다.

오늘은 그 이유와 해결책에 대해 알아보겠습니다.

무작위(random) 작업을 하는 코드를 보면 Randomize라고 하는 명령어들이 가끔 나옵니다.

많은 사람들은 엑셀이 당연히 계속하여 새로운 무작위 숫자를 만들거라고 생각합니다.

하지만, 엑셀은 계속 같은 무작위(???) 값을 가져온다. 왜?

왜냐하면, 엑셀은 내부의 랜덤한 숫자 발생기가 있고, 여기에 있는 숫자를 이용하여 랜덤한 값을 생성하는데 Randomize를 해주지 않으면 계속하여 동일한 값을 사용하기 때문입니다.

Randomize 함수는 랜덤 숫자 발생기의 숫자를 랜덤하게 바꾸어주어 계속하여 새로운 랜덤 값이 생성되도록 합니다.

구글 검색을 해보면

정의

네임스페이스: Microsoft.VisualBasic

어셈블리: Microsoft.VisualBasic.Core.dll

난수 생성기를 초기화합니다.

설명

메서드의 Randomize 이 오버로드는 시드 값을 사용하지 않습니다. 대신 시스템 타이머에서 반환된 값이 새 시드 값으로 사용됩니다.

사용되지 Rnd 않는 경우 Randomize 인수가 없는 함수는 처음 호출될 때 시드와 동일한 숫자를 사용하고, 그 후 마지막으로 생성된 숫자를 시드 값으로 사용합니다.

참고

난수 시퀀스를 반복하려면 숫자 인수와 함께 사용하기 Randomize 직전에 음수 인수를 사용하여 호출 Rnd 합니다.

중요

문과 함수는 Random Rnd 시드 값으로 시작하고 유한 범위 내에 속하는 숫자를 생성하기 때문에 생성에 사용되는 알고리즘을 아는 사람이 결과를 예측할 수 있습니다. 따라서 Random 문과 함수를 Rnd 사용하여 암호화에 사용할 난수를 생성해서는 안 됩니다. 자세한 내용은 RandomNumberGenerator를 참조하세요.

그러므로 랜덤한 값을 생성할 때는 아래와 같이 해주는게 좋습니다.

1. 첫 번째로, 아래와 같은 코드를 실행했을 때 첫 값이 계속해서 동일한 값으로 나타나는 상황을 가정해봅시다. (Randomize 행이 주석 처리된 상태)

zzz

이렇게 실행하면 매번 첫 값은 8로 고정되어 나타날 것입니다.

왜냐하면 엑셀은 내부적으로 랜덤한 숫자 발생기를 가지고 있고, 이 발생기에서 생성된 숫자를 이용하여 랜덤한 값을 만들어냅니다.

그런데 Randomize 함수가 주석 처리되어 있으면 랜덤한 숫자 발생기의 초기 상태가 변하지 않아 항상 같은 값이 나오게 됩니다.

2. 하지만, Randomize 함수의 주석을 제거하면 상황은 달라집니다.

zzz


이번에는 첫 값이 8이 아닌, 예를 들어 6이 나타날 것입니다.

Randomize 함수는 랜덤 숫자 발생기의 초기 상태를 랜덤하게 바꾸어줌으로써, 매번 다른 값을 생성할 수 있도록 도와줍니다.

이렇게 함으로써 동일한 값이 반복되는 문제를 해결할 수 있습니다.

따라서, 랜덤한 값을 생성할 때는 항상 Randomize 함수를 활용하여 랜덤 숫자 발생기를 초기화해주는 것이 좋습니다.

이를 통해 엑셀에서의 무작위 값 생성을 더욱 효과적으로 수행할 수 있습니다.

긴글 읽어주셔 감사합니다.

첨부파일

댓글목록

등록된 댓글이 없습니다.