ランダムに表示をするには?

解決


ゆみ  2008-01-09 22:55:48  No: 100050  IP: 192.*.*.*

初めまして。
VB6.0を始めて1ヶ月の初心者です。
調べてもどうしても分からない部分があったので質問させて下さい。
もし、分かる方がいらっしゃいましたら教えて頂けると嬉しいです。
まだ、初心者のため専門用語の知識が薄く。文章の内容が分かりづらかったり
ソースの書き方がめちゃくちゃだったりして見づらいかもしれませんが
見ていただけたら嬉しいです。よろしくお願いします。

【質問内容】

10問質問項目があり、それに対して、有り無しをチェックボックスにて回答していきます。
チェックボックスには

チェックボックス1 = flgSyokuji1 
チェックボックス2 = flgSyokuji2
チェックボックス3 = flgSyokuji3
チェックボックス4 = flgSyokuji4
チェックボックス5 = flgSyokuji5
チェックボックス6 = flgSyokuji6
チェックボックス7 = flgSyokuji7
チェックボックス8 = flgSyokuji8
チェックボックス9 = flgSyokuji9
チェックボックス10 = flgSyokuji10

と各々の変数に代入してフラグ(チェック有:1,チェック無:0)を持たせてあります。
データベースはAccess2000のADOを使用しているのですが、
ロード時にテーブル「tb_syokuji」を参照し最新のIDのフラグの有り無しを確認し
全ての変数に代入します。
その結果を元に、もし「flgSyokuji1 = 1」だった場合は「1〜9」の整数より
乱数を出し、「SyokujiNo1」という変数に代入。
「flgSyokuji2 = 1」だった場合は「10〜15」の整数より乱数を出し、
「SyokujiNo2」という変数に代入。
「flgSyokuji3 = 1」だった場合は「16〜23」の整数より乱数を出し、
「SyokujiNo3」という変数に代入。
「flgSyokuji4 = 1」だった場合は「24〜29」の整数より乱数を出し、
「SyokujiNo4」という変数に代入。
「flgSyokuji5 = 1」だった場合は「29〜32」の整数より乱数を出し、
「SyokujiNo5」という変数に代入。
「flgSyokuji6 = 1」だった場合は「33〜35」の整数より乱数を出し、
「SyokujiNo6」という変数に代入。
「flgSyokuji7 = 1」だった場合は「36〜37」の整数より乱数を出し、
「SyokujiNo7」という変数に代入。
「flgSyokuji8 = 1」だった場合は「38〜44」の整数より乱数を出し、
「SyokujiNo8」という変数に代入。
「flgSyokuji9 = 1」だった場合は「45〜46」の整数より乱数を出し、
「SyokujiNo9」という変数に代入。
「flgSyokuji10 = 1」だった場合は「47〜58」の整数より乱数を出し、
「SyokujiNo10」という変数に代入。

その結果を元に、SyokujiNo1〜SyokujiNo10の中からランダムにSyokujiNoという変数に
代入したいと思っているのですが・・・。
どのように式を書いたらよいのかが分かりません。
よろしければ教えて下さい。


【ソース】


Option Explicit


Private cn As ADODB.Connection
Private rs As ADODB.Recordset

Private strSQL  As String
Private SyokujiNo As Integer

Dim flgSyokuji1 As Integer
Dim flgSyokuji2 As Integer
Dim flgSyokuji3 As Integer
Dim flgSyokuji4 As Integer
Dim flgSyokuji5 As Integer
Dim flgSyokuji6 As Integer
Dim flgSyokuji7 As Integer
Dim flgSyokuji8 As Integer
Dim flgSyokuji9 As Integer
Dim flgSyokuji10 As Integer
Dim ret As Integer

'------------------------------------------------------------------------------------------------

Private Sub Form_Load()


'***********************************************************************************************

    Set cn = New ADODB.Connection
     cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & " Data Source = C:\Database\db1.mdb"
    cn.Open
    
'***********************************************************************************************
 
    Set rs = New ADODB.Recordset
    
    
    rs.Open "select * from tb_syokuji where id = 59", cn

    
    flgSyokuji1 = rs("flgSyokuji1")
    flgSyokuji2 = rs("flgSyokuji2")
    flgSyokuji3 = rs("flgSyokuji3")
    flgSyokuji4 = rs("flgSyokuji4")
    flgSyokuji5 = rs("flgSyokuji5")
    flgSyokuji6 = rs("flgSyokuji6")
    flgSyokuji7 = rs("flgSyokuji7")
    flgSyokuji8 = rs("flgSyokuji8")
    flgSyokuji9 = rs("flgSyokuji9")
    flgSyokuji10 = rs("flgSyokuji10")
    
    
'***********************************************************************************************

End Sub

'------------------------------------------------------------------------------------------------


Private Sub SSTab1_Click(PreviousTab As Integer)
    
    Set rs = New ADODB.Recordset
        
    Dim SyokujiNo1 As Integer
    Dim SyokujiNo2 As Integer
    Dim SyokujiNo3 As Integer
    Dim SyokujiNo4 As Integer
    Dim SyokujiNo5 As Integer
    Dim SyokujiNo6 As Integer
    Dim SyokujiNo7 As Integer
    Dim SyokujiNo8 As Integer
    Dim SyokujiNo9 As Integer
    Dim SyokujiNo10 As Integer
 
    If flgSyokuji1 = 1 Then
        SyokujiNo1 = Int(Rnd(1) * 9) + 1
    Else
        SyokujiNo1 = 59
    End If
    
    If flgSyokuji2 = 1 Then
        SyokujiNo2 = Int(Rnd(10) * 15) + 1
    Else
        SyokujiNo2 = 59
    End If
    
    If flgSyokuji3 = 1 Then
        SyokujiNo3 = Int(Rnd(16) * 23) + 1
    Else
        SyokujiNo3 = 59
    End If
    
    If flgSyokuji4 = 1 Then
        SyokujiNo4 = Int(Rnd(24) * 29) + 1
    Else
        SyokujiNo4 = 59
    End If
    
    If flgSyokuji5 = 1 Then
        SyokujiNo5 = Int(Rnd(30) * 32) + 1
    Else
        SyokujiNo5 = 59
    End If
    
    If flgSyokuji6 = 1 Then
        SyokujiNo6 = Int(Rnd(33) * 35) + 1
    Else
        SyokujiNo6 = 59
    End If
    
    If flgSyokuji7 = 1 Then
        SyokujiNo7 = Int(Rnd(36) * 37) + 1
    Else
        SyokujiNo7 = 59
    End If
    
    If flgSyokuji8 = 1 Then
        SyokujiNo8 = Int(Rnd(38) * 44) + 1
    Else
        SyokujiNo8 = 59
    End If
    If flgSyokuji9 = 1 Then
        SyokujiNo9 = Int(Rnd(45) * 46) + 1
    Else
        SyokujiNo9 = 59
    End If
    If flgSyokuji10 = 1 Then
        SyokujiNo10 = Int(Rnd(47) * 58) + 1
    Else
        SyokujiNo10 = 59
    End If
    
    '!!ランダムのランダム未解決!!
    
    SyokujiNo = ○○○○○←ココの部分に式を書こうと思っているのですか・・・
    
    rs.Open "select * from ms_snaiyou where cd=" & SyokujiNo, cn
    
    Text7.Text = rs("strNaiyou").Value


End Sub

編集 削除
まさ  2008-01-10 00:40:28  No: 100051  IP: 192.*.*.*

変数を配列にすると簡単ですよ!
変数の配列は分かりますか?
宣言は、
Dim flgSyokuji(10) As Integer
Dim SyokujiNo(10)  As Integer

使い方は、
SyokujiNo1の部分がSyokujiNo(1)、SyokujiNo2の部分がSyokujiNo(2)…
という感じになります。

こうすると、
>flgSyokuji1 = rs("flgSyokuji1")
>flgSyokuji2 = rs("flgSyokuji2")
>flgSyokuji3 = rs("flgSyokuji3")
といった部分も簡単にできます。
For i = 1 To 10
    flgSyokuji(i) = rs("flgSyokuji" & CStr(i)).Value
Next i

>その結果を元に、SyokujiNo1〜SyokujiNo10の中からランダムにSyokujiNo
…すみません。SyokujiNoを配列にすると配列ではないSyokujiNoは使えません。
ここでは、SyokujiNo→SyokujiNo_Rndとします。
1)1から10までの乱数を発生(仮に、intRansu変数にセットしたとします)
2)SyokujiNo_Rnd = SyokujiNo(intRansu)
といった感じでしょうか。

因みに、ランダムのランダム(常に同じ値になると言うことですよね?)は、
Form_Loadイベントなどに、「Randomize」を入れてみてください。

サンプルコードを作る時間がなくてすみません<(__)>

編集 削除
しんご  2008-01-10 00:51:51  No: 100052  IP: 192.*.*.*

SyokujiNo1〜SyokujiNo10を配列変数、たとえば
Dim Answer(1 to 10) as Integer
として、Answer()に値を代入していきます。

で、問題となっているランダムのランダム部分で

Index = Int(Rnd(1) * 10) + 1
SyokujiNo = Answer(Index)

とすればよいのではないでしょうか?

余談:
チェックボックスもflgSyokuji1〜10も配列にしてみては
どうでしょうか?

For i = 1 to 10
  FieldName = "flgSyokuji" & i
  flgSyokuji(i) = rs(FieldName).Value
  chkAnswer(i).Value = flgSyokuji(i)
Next

など。もちろん変数宣言はお忘れなく。

編集 削除
しんご  2008-01-10 00:53:03  No: 100053  IP: 192.*.*.*

すみません、まささんとかぶりました(^^;

編集 削除
ゆみ  2008-01-10 22:08:40  No: 100054  IP: 192.*.*.*

まささんとしんごさんのおかげで無事に解決することができました!!
こんなやり方があったんですね。また、一つお勉強になりました。
本当に、ありがとうございました^^

編集 削除