アプリ版:「スタンプのみでお礼する」機能のリリースについて

かるた取り(百人一首)のゲームのサイトは沢山ありますが、自分なりのものを作ってみたいのです。
フォーム上に100(かるた01~かるた99)を配置したのですが、このボックスにランダムに「下の句」を貼り付けるのにボックス名を変数化したいのです。
ボックス名を配列定義「かるた(99)」できればこれに越したことはないのですが

A 回答 (5件)

>「myRND」を使用するとテーブルにフィールドを用意しなくてもよいということですか


そうです
>SELECT 回答.上句, 回答.中句, 回答.下句, [myrnd] AS 式mFROM 回答 ORDER BY [myrnd];
myRNDは引数が必要です
SELECT 回答.上句, 回答.中句, 回答.下句, myrnd(上句) AS 式m FROM 回答 ORDER BY 式m;

この回答への補足

ACCESS2000ではダメなのでしょうか

フォームを開くと「式に未定義関数'MYRND'があります。」
myRNDはコードの1行目より次の様にしていますが

Option Compare Database
Option Explicit
Dim I, J, K As Integer
Dim DATA(99, 3) As String
Public Function myRND(anyfield)
Randomize
myRND = Rnd
End Function
Private Sub Form_Load()

end sub

よろしくお願いいたします。

補足日時:2007/09/27 04:44
    • good
    • 0
この回答へのお礼

色々お世話になりました。
この件一旦締め切らせていただきます。
知りたいことを整理して新たに質問を立ち上げますので、お気づきのときは宜しくお願いいたします。

お礼日時:2007/09/28 00:43

>任意のテキストボックスに下の句を格納する方法が分からないのです。


テキストボックスには何もせず
レコードのほうに乱数を格納してやればいいのです

もちろんあらかじめテーブルにランダムに数値を振っておくなどという方法では
毎回同じになりますから、クエリでそのつど乱数を振りなおすようにしておく必要があります

ただし、クエリで普通にRND関数を使うと、クエリの演算順序の最適化時に
この関数はレコードと関係のない関数とみなされ
一度評価した値が全てのレコードに適用されてしまいますから
下のようなユーザー関数を作り、あたかもレコードに関係ある関数かのように見せかけ
Accessをだましてやる必要があります

Public Function myRND(anyfield)
Randomize
myRND = Rnd
End Function

クエリに
乱数:myRND(適当なフィールド)
のような式フィールドを作りこれで並び替えてやれば
毎回異なる順序で並びます

この回答への補足

何度もお世話かけますが宜しくお願いします。
「myRND」を使用するとテーブルにフィールドを用意しなくてもよいということですか
SELECT 回答.上句, 回答.中句, 回答.下句, [myrnd] AS 式mFROM 回答 ORDER BY [myrnd];
ではダメでした
いまはテーブルに整列No.を定義し、フォームを開く前に
DoCmd.RunSQL "update 回答 set 整列No.=rnd(No.)*100;"
として、乱数を入れています

補足日時:2007/09/26 07:25
    • good
    • 0

フォーム上にテキストボックス"かるた0"~"かるた99"を配置しているとします(処理を簡単にするために1桁の数値は0~9としています)。


また、レコードは整列Noにランダムに0~99までの数値を振り、これが昇順になるように並べ替えられているものとします。

Private Sub Sample()
Dim i As Integer
Dim MyCtrl As Control

For i = 0 To 99
For Each MyCtrl In Controls
If MyCtrl.Name = "かるた" & i Then
MyCtrl.SetFocus
MyCtrl.Text = 下の句
DoCmd.GoToRecord , , acNext
End If
Next
Next i
End Sub

実際にデータを準備して確認はしていませんが、これでご希望の動作をするはずです。
    • good
    • 0
この回答へのお礼

大成功、完璧です!!!
感謝します。

お礼日時:2007/09/25 09:41

>整列No.に乱数を貼り付け、


>ゲームフォームLOAD時に整列No.順に呼び出しカードに貼り付けてゆこうと
この考えででいいんじゃないですか
これをするのに
テキストボックス名を並び替える必要はありません

レコードのほうの順番をシャッフルしてやるだけです
具体的にはクエリで乱数を格納する式フィールドを設け
そのフィールドで並び替えてやればいいだけです

この回答への補足

テキストボックスを並び替える積もりはありません。
テキストボックスは配列宣言は出来ませんよね
特定のテキストボックスへの格納は かるた05=下の句 でよいのですが
任意のテキストボックスに下の句を格納する方法が分からないのです。

何度もお手数をかけますが宜しくお願いします。

補足日時:2007/09/25 01:20
    • good
    • 0

発想を変えて下の句のほうをシャッフルして順に書き込んでいけばいいのでは

この回答への補足

早速のお返事有難うございます。
カードNo. 上の句、中の句、下の句、整列No.、チェック のフィールドを定義したテーブルに句は既に入力済です。
メニュー画面でかるたゲームをクリックしたときに整列No.に乱数を貼り付け、ゲームフォームLOAD時に整列No.順に呼び出しカードに貼り付けてゆこうと思ってます。
単純に1レコードづつ呼び出し「かるた01=下の句」「かるた02=下の句」…「かるた99=下の句」と式と呼び込みを含めて200行記述すればよいのですが
例えばテキストボックスに配列が使えるのであれば
for i=0 To 99
かるた(i)=下の句
DoCmd.GoToRecord , , acNext
NEXT i
としたいのですが、何かよい方法はないでしょうか

補足日時:2007/09/24 21:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!