![]() |
||
<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
MS-Access2000--VBAの小屋>俳句をひねろう |
じゃ、いきましょうか。イミディエイトウィンドウの方に、このプロシージャの名前を入力して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レコードしかないから、そりゃダブることもありますよね。。。ま、とりあえず、なんか適当な語句を拾ってきてくれそうです。
![]() |
![]() |
![]() |