dポイントプレゼントキャンペーン実施中!

VBAについて教えてください。

---------------------------
Sub Randomizeを入れた場合()
Dim intMax As Integer
Dim intMin As Integer

Randomize

intMin = 1
intMax = 10

Debug.Print Int((intMax - intMin + 1) * Rnd + intMin)

End Sub
---------------------------
Sub Randomizeを入れていない場合()
Dim intMax As Integer
Dim intMin As Integer

intMin = 1
intMax = 10

Debug.Print Int((intMax - intMin + 1) * Rnd + intMin)

End Sub
---------------------------
上記二つのマクロを実行しても
同じような結果が得られる気がするのですがRandomizeは必要なのでしょうか?

一つのサブプロシージャーの中で1回しか乱数を発生させないのなら
Randomizeを使って乱数を初期化する必要はないのですか?

A 回答 (1件)

RNDは疑似乱数と言って、バラバラに見えて、実際は計算で求めた値です。


その初期化に使う値を「種」と言って、Randomizeで設定するものです。
種が同じだと、出てくる乱数も同じになります。

下のマクロだと、Excel起動するたびに、同じ乱数になります。
Excel起動→マクロ実行→Excel終了→Excel起動→マクロ実行→....
となんどかやってみてください。

Ramdoizeは、値無しで実行すると、現在時刻を使って種を作ります。
そのため、実行した時間が変われば、乱数も変わります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/10/15 21:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!