指定した範囲でランダム(乱数)の整数を取得「makeRndInt」の解説
今回は、指定した範囲でランダム(乱数)の整数を取得するサブルーチンを解説していきます。こちらも開発事例でご紹介すると、ツイッターの自動つぶやきをランダムでつぶやけないかという依頼がありました。こちらはつぶやき一覧の中からランダムでつぶやき文を取得する際に利用したものです。他にもランダム整数はデータ収集に利用したり、他のプログラムと併せて利用されるなど、利用頻度がは高いので是非ご利用ください。
目次
- 指定した範囲でランダム(乱数)の整数を取得する処理の流れ
- 利用する関数・ステートメントについて
- 指定した範囲でランダム(乱数)の整数を取得するサンプルコード
- 指定した範囲でランダム(乱数)の整数を取得するサブルーチン「makeRndInt」の解説
- 「makeRndInt」を利用してランダム(乱数)の整数を取得するサンプルコード
- まとめ
指定した範囲でランダム(乱数)の整数を取得する処理の流れ
以下が今回の処理の流れになります。
- ①乱数ジェネレータを初期化
- ②範囲の設定
- ③指定した範囲でランダム(乱数)の整数を取得
利用する関数・ステートメントについて
今回利用するサブルーチンは以下になります。- Int関数とは
- Rnd関数とは
- Randomizeステートメントとは
Int関数とは
Int関数は小数点以下を切り捨てて整数にする関数です。
※マイナス値の場合は、小さいほうに丸めます。(Int(-10.52) → -11
構文 | Int(Num) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Num | ● | 倍精度浮動小数点数型の数値または任意の数式。 |
Rnd関数とは
Rnd関数は0以上1未満の乱数を発生させる関数です。戻り値は、単精度浮動小数点数型 (Single) の乱数を返します。また、引数Numberによって、どのような乱数を返すかを指定することもできます。
構文 | Rnd[(Number)] | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Number | ● | 乱数作成方法の指定。 number < 0 ・・・常に、Number のシード値によって決まる同じ数値を返します。 number > 0 ・・・乱数系列の次の乱数を返します。 number = 0 ・・・直前に生成した乱数を返します。 省略した場合 ・・・乱数系列の次の乱数を返します。 |
Randomizeステートメントとは
Randomizeステートメントは乱数ジェネレータを初期化 (乱数系列を再設定) します。Randomizeステートメントを使用しない場合、引数を指定しないでRnd関数を呼び出すと、最初にRnd 関数を呼び出したときのシード値(乱数ジェネレータの状態変数)と同じ値が使用されてしまいます。それ以降も直前に生成された数がシード値として使用されますので、Rnd関数を利用する場合は、必ず初期化させます。
構文 | Randomize[number] | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Number | ● | Rnd関数で使用される乱数のシード値を設定。 |
指定した範囲でランダム(乱数)の整数を取得するサンプルコード
今回のサンプルコードは指定した範囲でランダム(乱数)の整数を取得するマクロになります。
Sub sample()
For i = 1 To 5
'乱数ジェネレータを初期化
Randomize
'最小値設定
minInt = 1
'最大値設定
maxInt = 20
'最小値~最大値までの整数をランダム取得
Debug.Print Int((maxInt - minInt + 1) * Rnd + minInt)
Next i
End Sub
実行結果
1~20の範囲で5回乱数で取得した整数を取得する。
15
20
4
18
12
解説
For i = 1 To 5
(省略)
Next i
For~Nextステートメントで5回処理を繰り返します。
'乱数ジェネレータを初期化
Randomize
Randomizeステートメントを利用して、乱数をする際に乱数ジェネレータを初期化させます。
'最小値設定
minInt = 1
'最大値設定
maxInt = 20
整数を取得するための最小値・最大値を設定しています。
'最小値~最大値までの整数をランダム取得
Debug.Print Int((maxInt - minInt + 1) * Rnd + minInt)
こちらは最小値~最大値までの整数をランダムで取得する部分になります。「Int((最大値 - 最小値 + 1) * Rnd + 最小値)」は指定範囲の整数を取得するための公式になりますので、そのまま覚えましょう。続いて、こちらのサブルーチン化を解説していきます。
指定した範囲でランダム(乱数)の整数を取得するサブルーチン「makeRndInt」の解説
Function makeRndInt(minInt As Integer, maxInt As Integer) As Integer
'乱数ジェネレータを初期化
Randomize
'sInt~eIntまでの整数をランダム取得
makeRndInt = Int((maxInt - minInt + 1) * Rnd + minInt)
End Function
こちらが「指定した範囲でランダム(乱数)の整数を取得するサブルーチン」になります。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には取得する整数の「最小値」「最大値」の2つが設定されています。以下が引数の詳細になります。
構文 | makeRndInt(minInt, maxInt) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
minInt | Integer | 取得する整数の最小値 | 0 | × | |
maxInt | Integer | 取得する整数の最大値 | 100 | × |
「minInt」「maxInt」は必須項目です。「minInt」には取得する整数の最小値を設定します。「maxInt」には取得する整数の最大値を設定します。
「makeRndInt」を利用してランダム(乱数)の整数を取得するサンプルコード
Sub sample()
For i = 1 To 5
'1~20までの整数をランダム取得
Debug.Print makeRndInt(1, 20)
Next i
End Sub
解説
「makeRndInt」の最小値を1、最大値を20で設定してますので、0~20の範囲で整数をランダム取得します。
まとめ
今回は、乱数を発生させるRnd関数を利用してランダムの整数を取得しました。乱数はよくサイコロゲームやおみくじなど勉強用プログラムで用いられるものですが、実用的に利用することもあるので、とても便利です。
次の記事: VBAでIE操作に役立つ郵便番号をランダムで自動取得 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。