|
■No38376 (やじゅ さん) に返信 > 2009/07/12(Sun) 19:48:07 編集(投稿者) > > ■No38369 (ウヌ さん) に返信 > >>Tips7:トランプのシャッフル > >>http://www.interq.or.jp/www-user/komurak/tips/tranp.html >> >>このサイトも見たんですが、それでも分からなかったのです。それに、そのまま実行すると青線ひかれます。 > > 青線が引かれる原因の箇所である、iの型をLong→Integerに変更すればいいです。 > > Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click > Dim colBefore As Collection > Dim colAfter As Collection > Dim i As Integer 'Long→Integerに変更 > > colBefore = New Collection > colAfter = New Collection > > 'colBefore にセットされる値 > '1,2,3,4,5,6,7,8,9,10,11,12,13 > For i = 1 To 13 > colBefore.Add(CStr(i)) > Next > > 'colBefore が無くなるまで繰り返す > Do Until colBefore.Count = 0 > '1回目 1〜13 の中から乱数値を取得 例 i=5 > '2回目 1〜12 の中から乱数値を取得 例 i=9 > '3回目 1〜11 の中から乱数値を取得 例 i=3 > i = Int(Rnd(1) * (colBefore.Count - 1)) + 1 > > '1回目 colAfterに乱数値を登録 例 i=5 > '2回目 colAfterに乱数値を登録 例 i=9 > '3回目 colAfterに乱数値を登録 例 i=3 > colAfter.Add(colBefore.Item(i)) > > '既にcolAfterに登録した乱数値を削除(同じ乱数値を出さないため) > '1回目 colBeforeを1つ削除(乱数値) 例 i=5 > '2回目 colBeforeを1つ削除(乱数値) 例 i=9 > '3回目 colBeforeを1つ削除(乱数値) 例 i=3 > colBefore.Remove(i) > Loop > > 'colAfterにシャッフルされた値がセットされたので、全て表示 > For i = 1 To 13 > Debug.Print(colAfter.Item(i)) > Next > > End Sub >
じっくり読ませていただきました。そして、自分なりに、13ではなく10個の数字を数列化しました。確かに、重複なく数字が並ぶようになりました。
しかし、いつも10が最後になってしまいます。Collectionはインデックスが0からみたいなので、修正しようとしましたが、
Dim colBefore As Collection Dim colAfter As Collection Dim i As Integer 'Long→Integerに変更
colBefore = New Collection colAfter = New Collection
'colBefore にセットされる値 '1,2,3,4,5,6,7,8,9,10 For i = 0 To 9 colBefore.Add(CStr(i)) Next
'colBefore が無くなるまで繰り返す Do Until colBefore.Count = 0 '1回目 1〜10 の中から乱数値を取得 例 i=5 '2回目 1〜9 の中から乱数値を取得 例 i=9 '3回目 1〜8 の中から乱数値を取得 例 i=3 i = Int(Rnd() * (colBefore.Count - 1))
'1回目 colAfterに乱数値を登録 例 i=5 '2回目 colAfterに乱数値を登録 例 i=9 '3回目 colAfterに乱数値を登録 例 i=3 colAfter.Add(colBefore.Item(i))
'既にcolAfterに登録した乱数値を削除(同じ乱数値を出さないため) '1回目 colBeforeを1つ削除(乱数値) 例 i=5 '2回目 colBeforeを1つ削除(乱数値) 例 i=9 '3回目 colBeforeを1つ削除(乱数値) 例 i=3 colBefore.Remove(i) Loop
'colAfterにシャッフルされた値がセットされたので、全て表示 For i = 0 To 9 Debug.Print(colAfter.Item(i)) Next
どうしても、colAfter.Add(colBefore.Item(i))の行でエラーが起こります。たびたび申し訳ありませんが、回答よろしくお願いします。
|