ランダムな小数の値を返す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