|
▼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オブジェクトを使った方法
もちろん考えることを諦めました。
以上です。
|
|