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

하나를하더라도최선을 2023-11-15 13:17:27 27,558 0 0

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

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

​

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

​

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

​

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

​

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

​

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

​

구글 검색을 해보면

정의

네임스페이스: Microsoft.VisualBasic

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

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

설명

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

​

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

​

참고

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

​

중요

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

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

​

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

​

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

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

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

​

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


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

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

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

​

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

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

​

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

댓글 0개

첫 번째 댓글을 작성해보세요!