<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000--VBAの小屋>俳句をひねろう
   1 2 3



じゃ、いきましょうか。イミディエイトウィンドウの方に、このプロシージャの名前を入力してEnterします。
Subプロシージャですんで、プロシージャ名だけでいいですよ。

と、ウォッチウィンドウの方を見ると、値のところに、なんか細かい数字が出てますよね。
イミディエイトウィンドウ内に戻って、カーソルをプロシージャ名の右側に移動させて、もう一回Enterキーを押してみてください。もう一回実行されて、もう一回値が出てくると思います。多分、違う値がBangouに入ってきてると思うんですけど、どうでしょう?

Rnd関数は通常、0から1までの間で、ランダムに数値を発生させて返してきます。
でも、0から1じゃ・・・使いにくそうですねぇ。

とりあえず、プロシージャを中止しましょう。ツールバーの四角いボタンをクリックしてください。
茶色の行が、黄色っぽくなってたと思うんですけど、中止するとそれがなくなりますね。

じゃ、ちょっとばかり、Rnd関数の書き方を変えます。
Rndだけだと、0から1までの間の、小数点以下の細かい数字なので、これに7を掛ければ、7.xxxxxxxxという、7以上8以下の数値をランダムに発生させることができるはずです。
下のように書くことで、「1から7までの間で、数字をランダムに発生させる」という意味になります。

Bangouを整数型(Integer)にしておくと、とりあえず小数点以下の桁はあふれるので、結果は整数部分だけ表示されると思います。
あ、でもね、これじゃダメなんですよ。Integer型は小数点以下の桁を持つことのできない数値型でしたよね。でも、Rnd関数では小数点以下の桁を持つ数値がはじき出されます。きちんと整数部分だけの状態にしてから代入しないと、型の違いによるエラーが出たりしますからね。

上のように、Int関数を使って、余分な部分を切り捨てて整数だけの状態にしましょう。
こういうの、とっても大切ですよ。

そして、先ほど作成した3つのテーブルをそれぞれ準備します。
ひとつずつ開いて閉じてもいいのかもしれませんけど・・・とりあえずこんな感じにして見ました↑

さて・・・。
Rnd関数の、数値の範囲ですけど、1から7だと、7までの数字しか出ませんよね。あたりまえですが。
このBangouという変数の中身をどう使うかというと・・・もうお分かりですよね。先ほど作ったテーブルのNbrというフィールドの値と一致させようと思うんです。
つまり、適当にはじき出されたBangouという変数の中身と、同じNbrを持つレコードを探して、その「句」を使おう、というわけです。

つまり・・・テーブルの中に7レコードの句が入ってる場合はこれでいいですけど、15レコードに増やした場合は、Int((Rnd * 15) + 1に書き換えないといけないし、200レコードに増やした場合はInt((Rnd * 200) + 1に書き換えないといけない。めんどうくさくないですか?っていうか、うっかり忘れちゃったりして。200レコードに増やしって語句を豊富に持たせたとしても、15のままだと、結局15個の語句しか使われないことになっちゃいますよね。

じゃ、この時点で、各テーブルに何件データが入ってるか拾って、その値を使うとしましょう。

Cnt1、Cnt2、Cnt3という変数を宣言して、それぞれに、それぞれのテーブルのRecordCountを代入します。テーブル名.RecordCountで(正確にはレコードセット名.Recordcount)、そのテーブル内のレコード件数を返してきてくれます。

これをそのまま使っちゃおうというわけです。

だからね、Nbrは続きの番号じゃないとダメなんですよ。
だって、乱数で適当にはじき出した数値が、Nbrになかったら、歯抜けの俳句になっちゃいますよね。

さあ、あとは、それぞれのテーブルから、乱数ではじき出した番号のレコードを検索して、語句を引っ張り出すだけです。

Find命令はこんな幹事で使いましょう。

レコードセット名.Find "どういうレコードを検索したいのか、という命令文とか式"

Findという命令は、見つかると、そのレコードで止まり、見つからないとテーブルの最後のレコードまで移動します。

じゃ、ちょっとテスト・・・。今度は、デバッグという機能を使ってみましょう。
下のように、Debug命令を書いて、Printしてみます。紙に印刷する、っていう意味じゃないですよ。イミディエイトウィンドウでテストしたら、イミディエイトウィンドウ内に書き出してくれる、っていうわけです。

お、なんか語句が変数に入ってきてるみたいですね。これは、Saisyoという変数の中身、っていうことですよね。

まあ、乱数ですから、もちろん、同じ数字が2回続けて出てくることだってあります。
まだ7レコードしかないから、そりゃダブることもありますよね。。。ま、とりあえず、なんか適当な語句を拾ってきてくれそうです。