Excelスキルアップコレクション
           〜 Something U Want 〜


Google  

WWW を検索
Excelスキルアップコレクション内 を検索
 @     Top  >     Excel VBA スキルアップコレクション Topics  >     (25) 乱数を使う

 
(25) 乱数を使う

 でたらめな数字のことを「乱数」と呼びます。VBAから乱数を利用する方法を紹介します。

 下記サンプルコードは、Rnd() 関数を用いて、乱数をイミディエイトウィンドウに表示しているサンプルです。

 1行目:  Public Sub Sample_Rnd_01()
 2行目:  
 3行目:      Dim lp As Long
 4行目:      
 5行目:      ' 乱数を5つ作成する。
 6行目:      For lp = 1 To 5
 7行目:          Debug.Print Rnd()
 8行目:      Next
 9行目:  
10行目:  End Sub
 このサンプルコードを実行すると、イミディエイトウィンドウに乱数が表示されます。Rnd() 関数は0以上、1未満(※1以下ではありません。注意してください。)の範囲の値を返します。
 この乱数プログラムをもう一度実行すると、以下の結果が表示されます。Rnd() 関数は、実行するたびに異なる乱数を返してくることがわかります。
  


  任意の範囲の整数乱数を作成する  
 Rnd() 関数は0以上、1未満の範囲で乱数を作成する関数ですが、任意の範囲の整数乱数を作成したい場合は、以下のようにします。

 1行目:  Public Sub Sample_Rnd_02()
 2行目:  
 3行目:      ' 最大値、最小値の定義
 4行目:      Const upperbound As Integer = 6
 5行目:      Const lowerbound As Integer = 1
 6行目:  
 7行目:      Dim lp As Long
 8行目:      
 9行目:      ' 乱数を10個作成する。
10行目:      For lp = 1 To 10
11行目:          Debug.Print Int((upperbound - lowerbound + 1) * Rnd() + lowerbound)
12行目:      Next
13行目:  
14行目:  End Sub
 このサンプルコードを実行すると、イミディエイトウィンドウに10個の整数乱数が、1以上、6以下の範囲で表示されます。
  


  任意の範囲の実数乱数を作成する  
 任意の範囲の実数乱数を作成したい場合は、以下のようにします。

 1行目:  Public Sub Sample_Rnd_03()
 2行目:  
 3行目:      ' 最大値、最小値の定義
 4行目:      Const upperbound As Double = 3.5
 5行目:      Const lowerbound As Double = -1.4
 6行目:  
 7行目:      Dim lp As Long
 8行目:      
 9行目:      ' 乱数を10個作成する。
10行目:      For lp = 1 To 10
11行目:          Debug.Print (upperbound - lowerbound) * Rnd() + lowerbound
12行目:      Next
13行目:  
14行目:  End Sub
 このサンプルコードを実行すると、イミディエイトウィンドウに10個の整数乱数が、-1.4以上、3.5以下の範囲で表示されます。


  Rnd() 関数の引数  
 Rnd() 関数には、「Number引数」が用意されています。
Number意味
< 0常に、引数numberのシード値によって決まる同じ数値を返します。
> 0乱数系列の次の乱数を返します。
= 0 直前に生成した乱数を返します。
省略乱数系列の次の乱数を返します。
 例えば、Rnd() 関数を仕様する初回に、Numberに「-0.01」と言う値を渡すと、常に同じ乱数系列を取得することができます。

 1行目:  Public Sub Sample_Rnd_04()
 2行目:  
 3行目:      Dim lp As Long
 4行目:      
 5行目:      ' 乱数を10個作成する。
 6行目:      For lp = 1 To 10
 7行目:          If lp = 1 Then
 8行目:              Debug.Print Rnd(-0.01)
 9行目:          Else
10行目:              Debug.Print Rnd()
11行目:          End If
12行目:      Next
13行目:  
14行目:  End Sub
 このサンプルコードを実行すると、イミディエイトウィンドウに10個の乱数が表示されます。何回実行しても、同じ乱数が返ってきます。
 Rnd() 関数にNumberを渡すのは、初回に一回だけにして下さい。以下は、誤った使い方です。Rnd() 関数を何回呼び出しても同じ値が返ってくることになり、意味がありません。

 1行目:  Public Sub Sample_Rnd_05()
 2行目:  
 3行目:      Dim lp As Long
 4行目:      
 5行目:      ' 乱数を10個作成する。
 6行目:      For lp = 1 To 10
 7行目:          Debug.Print Rnd(-0.01)
 8行目:      Next
 9行目:  
10行目:  End Sub
  
ページの先頭へ