<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97 VBAの森>ゲームでも作ってみるか



(2)

例えば、[フォーム]という名前のフォームに[番号]という名前のテキストボックスがあったとして・・・。
ここに入力された値をSeekのキーワードに使うという場合は、こんな感じになります。

こういうのはみなさんもうオッケーですよね。

引数を使ってもいいですね。例えば下のようにPuにKazuという名前の引数を作っておいたとして、

Public Function Pu(Kazu)

Dim db As Database, d1 As Recordset
Set db = CurrentDb
Set d1 = db.OpenRecordset("マスター")

d1.Index = "ID"

d1.Seek "=", Kazu

Pu = d1![誰が]


で、デバッグウィンドウに入力するときに、

?Pu(15)

と入力してEnterすると、カッコの中に入れた数、つまりkazuという引数にしたがってSeekしてきてくれるわけですね。


しかしー・・・これでは、「どの文章が出てくるかワカラナイ」という迫力はなくなりますね・・・。
普段のAccessではそんな機能必要ないんですけど、こういう時はねぇ・・・。そこで、最終手段。乱数を使います。

Rndという関数がありますので、まずはヘルプを見てみましょう。

ふむ。どうやら、指定した数の範囲の中で、適当にその都度なんか数値を返してくれるという関数のようです。
こういうのを乱数っていいます。

じゃ、ちょっと試してみようかな・・・。
今まで書いたSeekの部分をの左端に'(シングルコーテーション)を入力しましょう。
こうするとコメント行ということで、実行されなくなります。とりあえずね。

で、Puがとってくる答えを、こんなふうにしてみます。

Pu = 1 * Rnd

と、結果はデバッグウィンドウに出ているように・・・。?Pu()の後ろにカーソル移動させてEnterキーを何回か押してみましょう。
何度も何度も実行されます。

なんか、小数点以下の桁がじょろじょろ出ますけど、無作為にいろんな数字が出ていること、おわかりいただけます?

じゃ、

Pu = 20 * Rnd

ってしたら???

これまたずいぶんと端数が・・・
でも、整数部分だけ見ると、1から20の間で、これまた無作為に出て来てますよね。
もちろん同じ数字が2度3度続くこともありますけど・・・乱数ですからね。

じゃあ、小数部分を切り捨てて、整数部分だけ取り出して、これをSeekのキーワードにしたらいかがでしょう。

切り捨てにはInt関数を使いましょう。

いけそうですよね。
5が出たら5レコード目、19が出たら19レコード目・・・と、ランダムにテーブルの中の文章を拾って来てくれるはずです。

じゃ、やってみましょう。Puには最終的にもっと違う値が入りますから、乱数を入れる適当な変数を作りましょう。
で、、この中にRnd関数によって発生した乱数を切り捨てたものを代入します。
変数の名前は、そうですねぇ・・・Ransuとしましょうか。なんでもいいんですけど、なんだかわかんなくなっちゃうのはなしですよ。

Dim Ransu As Integer '<- - - 変数を宣言
Ransu = Int((20 * Rnd) + 1) '<- - - その変数に値を代入

d1.Index = "ID"
d1.Seek "=", Ransu '<- - - 変数をSeekのキーワードに
Pu = d1![誰が]

と、なんか適当に文章が出て来てるように見えません?
20レコードだとあんまりランダムっぽくならないかもしれないですが、これが200レコードとか500レコードとかになると、結構いけると思いますよ。