![]() |
||
<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レコードとかになると、結構いけると思いますよ。
![]() |
![]() |
![]() |