VBAの乱数を生成するサンプル(Rnd関数)

VBAのRnd関数で、乱数を生成するサンプルです。Excel、Accessとも同じです。

目次

サンプル 乱数を整数かつ範囲で取得する(Rnd関数)
  配列の値をランダムに表示する(じゃんけん)
  テストデータを生成しCSV出力する(ランダムな文字列)

乱数を整数かつ範囲で取得する(Rnd関数)

Rnd関数は、0 以上 1 未満の値を乱数で返します。

乱数を整数かつ範囲で取得する場合は、以下の式を使用します。

Int((最大値 - 最小値 + 1) * Rnd + 最小値)

整数を取得するのでIntを使用します。

乱数の値を1から10にしたい場合は、最小値に1、最大値に10をセットします。

乱数を整数で取得するかつ範囲ありのサンプルです。

Sub test1()

    Dim a As Integer

    a = Int((2 - 0 + 1) * Rnd + 0)

    Debug.Print a '0から2
    
    
    a = Int((3 - 1 + 1) * Rnd + 1)

    Debug.Print a '1から3
    
End Sub

5行目は、0から2の値をランダムに返します。
10行目は、1から3の値をランダムに返します。

配列の値をランダムに表示する(じゃんけん)

上記の式を利用すると配列の値をランダムに表示できます。

Sub test1()

    Dim ar1 As Variant
    
    ar1 = Array("グー", "チョキ", "パー")

    r = Int((2 - 0 + 1) * Rnd + 0) '0から2

    Debug.Print ar1(r) 'ランダムに表示
    
End Sub

5行目は、配列です。
7行目は、0から2の値をランダムに返します。配列のインデックス値になります。
9行目は、配列の値をランダムに表示します。

テストデータを生成しCSV出力する(ランダムな文字列)

乱数と配列を利用してテストデータを作成するサンプルです。
文字列はランダムなアルファベット5文字になります。

以下は、テストデータの例です。

コードです。

Sub test1()
    Dim fileName As String 'ファイル

    '1 出力するファイルの場所
    fileName = ActiveWorkbook.Path & "\TestData1.csv"
    
    '2 データ
    Dim ar1, ar2 As Variant
    
    ar1 = Array("A", "B", "C", "D", "E", "F", "G", _
    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", _
    "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
    
    ar2 = Array("0", "1")
    
    '3 対象のファイルを開く
    Open fileName For Output As #1
    
    '4 データをセット
    For a = 1 To 1000
        r1 = Int((25 - 0 + 1) * Rnd + 0) '0から25
        r2 = Int((25 - 0 + 1) * Rnd + 0) '0から25
        r3 = Int((25 - 0 + 1) * Rnd + 0) '0から25
        r4 = Int((25 - 0 + 1) * Rnd + 0) '0から25
        r5 = Int((25 - 0 + 1) * Rnd + 0) '0から25
        r6 = Int((1 - 0 + 1) * Rnd + 0) '0から1
    
        '5 ファイルに出力する
        Print #1, CStr(a) + "," + _
                ar1(r1) + ar1(r2) + ar1(r3) + _
                ar1(r4) + ar1(r5) + "," + _
                CStr(r6)
    Next
    
    '6 対象のファイルを閉じる
    Close #1
End Sub

10~12行目は、アルファベットの配列です。全部で26個あります。
20行目の1000は出力する行数です。1万にすれば1万行出力されます。
21~25行目はランダムなアルファベット1文字が変数にセットされます。
29~32行目で1行にしてファイルに出力しています。

以下は、MicrosoftのVBAのRnd 関数のリンクです。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/rnd-function

関連の記事

VBA For Each文のサンプル(Excel/Access)
VBA 配列の仕組みと使い方(Excel/Access)

△上に戻る