VBAのIE(InternetExplorer)制御で役立つ指定した範囲でランダム(乱数)の整数を取得する制御方法について解説しています。
今回は、指定した範囲でランダム(乱数)の整数を取得するサブルーチンを解説していきます。こちらも開発事例でご紹介すると、ツイッターの自動つぶやきをランダムでつぶやけないかという依頼がありました。こちらはつぶやき一覧の中からランダムでつぶやき文を取得する際に利用したものです。他にもランダム整数はデータ収集に利用したり、他のプログラムと併せて利用されるなど、利用頻度がは高いので是非ご利用ください。
以下が今回の処理の流れになります。
Int関数は小数点以下を切り捨てて整数にする関数です。
※マイナス値の場合は、小さいほうに丸めます。(Int(-10.52) → -11
構文 | Int(Num) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Num | ● | 倍精度浮動小数点数型の数値または任意の数式。 |
Rnd関数は0以上1未満の乱数を発生させる関数です。戻り値は、単精度浮動小数点数型 (Single) の乱数を返します。また、引数Numberによって、どのような乱数を返すかを指定することもできます。
構文 | Rnd[(Number)] | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Number | ● | 乱数作成方法の指定。 number < 0 ・・・常に、Number のシード値によって決まる同じ数値を返します。 number > 0 ・・・乱数系列の次の乱数を返します。 number = 0 ・・・直前に生成した乱数を返します。 省略した場合 ・・・乱数系列の次の乱数を返します。 |
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 + 最小値)」は指定範囲の整数を取得するための公式になりますので、そのまま覚えましょう。続いて、こちらのサブルーチン化を解説していきます。
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」には取得する整数の最大値を設定します。
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部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。
こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。