ランダムな小数の値を返すRnd関数を解説します。
目次
Rnd関数は0より大きく1よりランダムな小さい値を返す
まずはRnd関数を知るために、Rnd関数で生成した値を単に表示するためのサンプルを作成します。単にRndと書くと0より大きく1より小さいランダムな小数の値を返します。
Sub Rnd関数サンプル()
MsgBox Rnd
End Sub
ランダムな小数の値が表示されました。Rndは関数なのでRnd()とかいてももちろんOK です。今回は引数を取らない場合の解説なので、()は省略できます。
Rnd関数の使い所
Rnd関数の便利な使い所を2点、紹介します。
- ランダムな選択肢を生成する
- サンプルデータ用のランダムな値を生成する
順に解説します。
ランダムな選択肢を生成する
Rnd関数は0より大きく、1より小さい小数の値を返します。そのため、戻り値に整数を掛け算して、小数点部分を切り捨てれば、0からその掛けた整数-1までのランダムな整数を発生させることができます。これを利用しておみくじプログラムを作成してみます。
Sub Rnd関数サンプル()
Dim r As Long
r = Int(Rnd * 4)
Select Case r
Case 0
MsgBox "大凶"
Case 1
MsgBox "小吉"
Case 2
MsgBox "中吉"
Case 3
MsgBox "大吉"
End Select
End Subこれで実行するたびに、大凶、小吉、中吉、大吉のいずれかがメッセージボックスに表示されるプログラムができました。ぽいんとは、r= Int(Rnd * 4) の部分です。Intは小数部分を切り捨てて、整数にする関数です。4をかけ算してから小数部分を切り取ることにより、0~3までの4つの値のいずれかを生成しています。それをおみくじの出力に割り当てています。
サンプルデータ用のランダムな値を生成する
次に、サンプルデータ用の値を生成する方法です。このブログもサンプルデータがよく出てきますが、販売単価や商品コードと言った値は、このRnd関数で生成しています。
たとえば5桁の商品コードを生成したい場合は、桁数が変わらないように文字の「a」と0~9の数字 x 4桁を連結しています。
Sub Rnd関数サンプル2()
Dim i As Long
Dim r As Long
Dim 商品コード As String
商品コード = "a"
For i = 1 To 4
r = Int(Rnd * 10)
商品コード = 商品コード & r
Next i
MsgBox 商品コード
End Sub
Randomizeステートメントと併せて使う
これまで特に問題がないように使ってきましたが、実は問題があります。それは、Rnd関数は厳密にはランダムな値を返す関数ではない、と言うことです。Rnd関数が初めて実行されたとき、一度だけ、乱数表が生成されます。それを順番に読み取っているだけです。
よっておみくじアプリなら何度も繰り返していると、同じ結果が出力されることがばれてしまいます。この乱数表を新たに毎回生成することによって、本当にランダムな値を得ることができます。方法は簡単でRnd関数を使うたびにRandomizeステートメントを記述するだけです。
Sub Rnd関数サンプル_改善バージョン()
Dim r As Long
Randomize '←ここに一行足しただけ
r = Int(Rnd * 4)
Select Case r
Case 0
MsgBox "大凶"
Case 1
MsgBox "小吉"
Case 2
MsgBox "中吉"
Case 3
MsgBox "大吉"
End Select
End Sub業務の自動化プログラムにRnd関数を使う事はないと思いますが、テスト用のデータを生成するときなど便利なので、ご活用下さい!
<お知らせ>
Excel VBAでクラスやオブジェクトの概念と使い方を丁寧に解説し、ワンランク上の実力を目指すガイドを書きました。この本で本物の実力を身に付けて一皮むけてみませんか?
books.rakuten.co.jp