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



(3)

さあて、ここまできたらちょっと欲が出ますよね。
今、1から20の間で乱数発生させてますけど、20の根拠は、[マスター]の中のレコード数が20だからなんです。
もっとわかりやすく言っちゃうと、[ID]に1から20までの値が入力されてるからなんですね。
じゃあ、1レコード増やしたらここを21にしないと、増やした21レコード目は一生使われないってことになりますよね。

ここが「どういう意味???」状態だと、ちょっと苦しいです。コード、もう一度じっくり眺めてみましょう。

そこで、20を、d1のレコード数という値に変えて、後からテーブルにレコードを追加しても、その都度対応できるようにしましょう。

あ、くどいようですが、この[ID]、飛び飛びになってたりしたらこのプロシージャなりたたないですからね。

d1.RecordCountというのが、d1、つまり[マスター]のレコード数を知る命令の書き方です。

他にも方法はありますが、今回はこれでいこうと思います。

で、ここまで来ると乱数を発生させる式が長くなったりわかりにくいかな・・・ということで、d1.RecordCountを変数にしようと思います。
あ、別にこのままでもいいんですけどね。

まあ、変数の使い方の練習だと思って、挑戦してみてください。


で、さらに、Puに直接検索結果を入れるのではなくて、ここも変数を使おうと思います。
なぜなら、あと[どこで][誰と][何をして][どうした]と、4つも検索してきたいフィールドがあるんですよね。それぞれひとつずつ変数を作って、変数の中に検索結果を入れようと思うんです。

変数が苦手な方は、この辺が手探りになりますかね。
でも、別に対した処理じゃないんです。目的は効率よく書くため。
コードはできるだけ行数文字数が少ない方が理想的なんですよ。

さて。変数が随分増えましたねぇ。まあ、Dim文はどこにあってもいいんですけど、できれば上の方にまとめておいた方がいいですね。
わかりやすいっていう意味なんで、別にそのままでもいいんですけど、他の人がコード覗いたときなど、変数の宣言文はどこか一ヶ所にまとまってた方が探しやすいと思いますよ。

[誰が]がうまくいったら、次に[どこで]を探します。
同じように手前で乱数を発生させ([誰が]と同じ数値を使ったんじゃあんまり意味ないですもんね)、Seekします。
インデックスは、[ID]を使うのであればそのまま継続してますので、[どこで]のところでは書かなくてもオッケーです。
書いてもいいですけど、書かなくてもいいなら書かない方がいいですよね。

で、Puの中に、それぞれ検索した結果が入った変数を、&でつなげます。この変数を""で囲んだらだめですよ。
何回やってもPuの返す値は「DaregaDokode」になります。変数じゃなくて任意の文字列として扱われちゃいますからね。

出ます?

ここまでくればあとは力仕事。

わたしは、さらにBunsyoという名前の文字型の変数を作って、

Public Function Pu() As String
Dim db As Database, d1, d2 As Recordset
Dim RecCnt As Integer
Dim Ransu As Integer
Dim Darega, Dokode, Dareto, Naniwosite, Dousita As String
Dim Bunsyo As String

Set db = CurrentDb
Set d1 = db.OpenRecordset("マスター")
Set d2 = db.OpenRecordset("文章テーブル")

RecCnt = d1.RecordCount

Ransu = Int((RecCnt * Rnd) + 1)

d1.Index = "ID"
d1.Seek "=", Ransu
Darega = d1![誰が]

Ransu = Int((RecCnt * Rnd) + 1)
d1.Seek "=", Ransu
Dokode = d1![どこで]

Ransu = Int((RecCnt * Rnd) + 1)
d1.Seek "=", Ransu
Dareto = d1![誰と]

Ransu = Int((RecCnt * Rnd) + 1)
d1.Seek "=", Ransu
Naniwosite = d1![何をして]

Ransu = Int((RecCnt * Rnd) + 1)
d1.Seek "=", Ransu
Dousita = d1![どうした]

Bunsyo =Darega &Dokode & Dareto & Naniwosite & Dousita

と。どうでしょう。同じような処理の繰り返しですんで、ひとつ理解できてしまえばどうってことないと思います。


で、もうひとくふう。

この結果を、フォームのテキストボックスにどんと出そうと思います。

一番下に、

Forms![フォーム]![テキスト] = Bunsyo

とでも入力してみてください。で、このモジュールは保存しながら閉じましょう。
で、フォームという名前のフォームを作って、その中にテキストという名前のテキストボックスを作ります。

このフォームの中に、コマンドボタンを作り、そのコマンドボタンのクリック時のイベントに

=Pu( )

と直接記入します。これで完成。

コマンドボタンをクリックすると、そのたびに変な文章が作成されてテキストボックスの中に現れるはずです。
どっかおかしかったらエラーが出て止まりますから、止まったところあたりをじっくり見て、間違いがないかどうか確認してくださいね。

え・・・無意味??・・・。
そりゃまあ、こんなもん作れたからって何にもなんないですけども・・・。
でも、変数の扱いやテーブルの中の値を検索する方法、少しはお役に立ちそうでしょう?