| 
    
     |  | ▼ichinose さん,ちゃっぴ さん こんにちは。二人ともありがとうございました。
 
 >http://www2.jiu.ac.jp/~en/VBSdocs/390.htm
 Dictionaryは、ここを見て下さい。
 ↑ヘルプで見つかりました。失礼しました。
 
 >1の配列をループで一つ一つ調べる方法
 >3の乱数を文字列として格納する方法
 ↑
 当たり前ですが、バッチリでした。ありがとうございました。
 
 >重複チェックをどうするか という箇所を思いついたもの
 ↑
 重複した場所をどうするか。 ここのロジックがポイントですね。
 早くいろいろなことを思いつけるようになりたいです。
 
 ちゃっぴ さんへ
 ベンチマークやってみました。(少しは練習になるかと思って)
 1から300までの乱数を重複なしに20個発生するのを100回繰り返して
 タイムを取り、それを10回繰り返して平均をとりました。(手作業ではありませんよ。)
 マシンパワーに関係すると思いますが、
 PEN31G メモリ 256KB OS WIN2000 EXCEL2002 の条件で
 
 >1の配列をループで一つ一つ調べる方法
 一回の平均 35.2ms
 
 >2のApplication.Match関数を使う方法
 一回の平均 36.6ms
 
 >3の乱数を文字列として格納する方法
 一回の平均 37.6ms
 
 >4シートを使ってCountifを使った方法
 一回の平均 117ms
 
 >5ユーザー定義のコレクションを使った方法
 残念ながらセルに書き出すことができませんでした。トホホ 我ながら情けない。
 
 
 Sub test4()
 Dim colNumber As New Collection
 Dim intRndNo As Integer
 Dim vntRndNo As Variant
 
 'エラートラップ
 On Error Resume Next
 Do
 intRndNo = Int(300 * Rnd) + 1
 'コレクション格納
 colNumber.Add intRndNo, "Key" & intRndNo
 Loop Until colNumber.Count = 20
 On Error GoTo 0
 '  For Each vntRndNo In colNumber
 For i = 1 To 20
 Cells(i, 5).Value = vntRndNo ←ここがわからない。20個格納されている                  はずだから、choose関数? array?????
 Next
 ' Next vntRndNo
 End Sub
 
 >6Dictionaryオブジェクトを使った方法
 もちろん考えることを諦めました。
 以上です。
 
 |  |