指定した範囲でランダム(乱数)の整数を取得「makeRndInt」の解説

今回は、指定した範囲でランダム(乱数)の整数を取得するサブルーチンを解説していきます。こちらも開発事例でご紹介すると、ツイッターの自動つぶやきをランダムでつぶやけないかという依頼がありました。こちらはつぶやき一覧の中からランダムでつぶやき文を取得する際に利用したものです。他にもランダム整数はデータ収集に利用したり、他のプログラムと併せて利用されるなど、利用頻度がは高いので是非ご利用ください。

目次

スポンサー リンク

指定した範囲でランダム(乱数)の整数を取得する処理の流れ

以下が今回の処理の流れになります。

  • ①乱数ジェネレータを初期化
  • ②範囲の設定
  • ③指定した範囲でランダム(乱数)の整数を取得

利用する関数・ステートメントについて

今回利用するサブルーチンは以下になります。

  • Int関数とは
  • Rnd関数とは
  • Randomizeステートメントとは

Int関数とは

Int関数小数点以下を切り捨てて整数にする関数です。
※マイナス値の場合は、小さいほうに丸めます。(Int(-10.52) → -11

Int(倍精度浮動小数点数型の数値または任意の数式)
構文Int(Num)
引数省略説明
Num倍精度浮動小数点数型の数値または任意の数式。

Rnd関数とは

Rnd関数0以上1未満の乱数を発生させる関数です。戻り値は、単精度浮動小数点数型 (Single) の乱数を返します。また、引数Numberによって、どのような乱数を返すかを指定することもできます。

Rnd[乱数作成方法の指定]
構文Rnd[(Number)]
引数省略説明
Number乱数作成方法の指定。
number < 0 ・・・常に、Number のシード値によって決まる同じ数値を返します。
number > 0 ・・・乱数系列の次の乱数を返します。
number = 0 ・・・直前に生成した乱数を返します。
省略した場合 ・・・乱数系列の次の乱数を返します。

Randomizeステートメントとは

Randomizeステートメント乱数ジェネレータを初期化 (乱数系列を再設定) します。Randomizeステートメントを使用しない場合、引数を指定しないでRnd関数を呼び出すと、最初にRnd 関数を呼び出したときのシード値(乱数ジェネレータの状態変数)と同じ値が使用されてしまいます。それ以降も直前に生成された数がシード値として使用されますので、Rnd関数を利用する場合は、必ず初期化させます。

Randomize[乱数のシード値]
構文Randomize[number]
引数省略説明
NumberRnd関数で使用される乱数のシード値を設定。

指定した範囲でランダム(乱数)の整数を取得するサンプルコード

今回のサンプルコードは指定した範囲でランダム(乱数)の整数を取得するマクロになります。

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(取得する整数の最小値, 取得する整数の最大値)
構文makeRndInt(minInt, maxInt)
引数名データ型内容値の事例初期値省略
minIntInteger取得する整数の最小値0×
maxIntInteger取得する整数の最大値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操作に役立つ郵便番号をランダムで自動取得 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

スポンサー リンク

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

スポンサー リンク

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。