Excel VBAで0以上1以下の乱数を生成する方法を考えてみました

Pocket

 VBAで乱数を生成するときは「Rnd」を使用するかと思います。このRndは0以上1未満の乱数を作ります。
 私は考えます。なんで0以上1以下じゃないの?

 VBAで0以上1以下の乱数を作る方法についてググってもなかなか出てきません。調べているうちに、一般的に乱数は〇以上□未満の乱数がよく使われますという記述を見つけるくらい。

 調べても出ないので自分で考えてみました。

0以上1以下の乱数を生成する方法はこれだ!(多分間違っている)

 最初に結論を書きます。

Function random_single() As Single
    Randomize
    Dim random_1 As Single
    Dim random_2 As Single
    
    random_1 = Rnd
    random_2 = Rnd
    
    If random_1 = 0 Then
        random_single = 1
    Else
        random_single = random_2
    End If
End Function

 簡単に説明しますと。random_singleという関数で0以上1以下の乱数を得ることを目指します。
 そのために、Rndを2回使用し0以上1未満の乱数を2つ生成します。それぞれrandom_1, random_2に代入します。
 このrandom_1とrandom_2の値により下図のように場合分けしてrandom_singleへ代入し0以上1以下の乱数を得ます。

 これで、random_doubleにより0以上1以下の乱数を得ることができます。

問題点

 趣味レベルでしたら多分このやり方で十分だと思いますが、図を見て分かりますとおり私の提案するやり方ですと0が出る確率より1が出る確率が多くなると思います。また、私はVBAの特性は全然理解できていませんし考慮できていません。

最後に

 ここまで記事を読んでいただきありがとうございました。
 今回のことを実現するまでにいろいろググったのですが、0以上1以下の乱数の作り方はすぐには見つかりませんでした。 それともちょうど1が出る確率は相当低いでしょうから、別に気にしなくてもいいということなのでしょうか。
 とりあえず作ってみたのですが、他に良い方法をご存知の方がいらっしゃったら教えていただけると幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です