このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】Rnd関数で0から9までの乱数を取得する方法(ランダム)

2024年1月11日

Rnd関数で0から9までの乱数を取得する方法

今回はRnd関数を用いて0から9までの乱数を取得する方法を紹介します。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

【Rnd関数】0から9までの乱数を取得するプログラム

Sub RndFunction1()
    '0~9までの乱数をイミディエイトウィンドウに表示
    
    Randomize '乱数のシード値を変更
    
    Debug.Print Int(Rnd * 10)
    
End Sub

このプログラムを実行すると、0~9までの乱数をイミディエイトウィンドウに表示します。

Rnd関数の仕組み

Rnd関数は、0以上1未満のランダムな小数を返します。

そのため、Rnd * 10とすると0以上10未満のランダムな小数が得られます。

さらにInt関数で小数点以下を切り捨てることによって0~9までの整数値へ変更しています。

【Rnd関数】MINからMAXまでの乱数を取得するプログラム

Sub RndFunction2()
    'MIN_NUM~MAX_NUMまでの乱数をイミディエイトウィンドウに表示
    
    Const MIN_NUM = 0
    Const MAX_NUM = 9
    
    Randomize '乱数のシード値を変更
    
    Debug.Print Int((MAX_NUM - MIN_NUM + 1) * Rnd + MIN_NUM)
    
End Sub

先ほどのプログラムでは0~9の乱数が得られましたが、このプログラムはそれを拡張しています。

MIN_NUMとMAX_NUMの間の乱数を取得することができます。

0~9だけの乱数だけ使うケースは稀だと思うので、こちらを使用してみてください。

Function GetRnd(min As Long, max As Long) As Long
    'min~maxまでの乱数を返す
    
    Randomize '乱数のシード値を変更
    GetRnd = Int((max - min + 1) * Rnd + min)
    
End Function

このようにminとmaxの値を引数とした汎用関数としておく方法もあります。

この関数はmin~maxまでの間の値をランダムで返してくれます。

Randomizeステートメントについて

    Randomize '乱数のシード値を変更

どちらのプログラムも最初にRandomizeステートメントを記載しています。

あまり深く考えず、Rnd関数を使う場合は最初にこのステートメントを記載するようにしてください。

理由を軽く説明すると、Rnd関数は乱数を返すのですが、シード値というものをベースに乱数を生成しています。

そのため、このシード値が同じだと全く同じ順番で乱数が作られてしまいます。

Randomizeステートメントは時刻を利用してシード値を変更する命令で、これを冒頭に入れることで毎回異なった乱数を得ることができます。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

VBA

Posted by やろまい