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)