|
▼ponpon さん、Asakiさん、おはようございます。
> バッチリだったのですが、ここまでできたら、シートを使わないで何とかならないものかと、配列を使って考えたのですが、
いくつか方法はあると思います。
1.配列の中身をループで調べる方法
変数と変数の比較だから処理は速いですよ
2.Application.Match関数を使う方法
配列にも使えます。但し、上限があります。
3.乱数を文字列として配列に格納する方法(Filter関数を使用する)
配列の数が5000ぐらいまでとして、2の方法を使用して・・・。
'==================================
Sub test()
Dim rndNO(1 To 20) As Integer
Dim intNO As Integer
Dim p As Integer
Dim t As Integer
Randomize
For p = 1 To 20
t = 30
intNO = Int(Rnd() * t) + 1 '1からtまでの乱数の発生
Do Until IsError(Application.Match(intNO, rndNO(), 0)) '同じ数字がでたら、違うまでループ
intNO = Int(Rnd() * t) + 1 '1からtまでの乱数の発生
Loop
rndNO(p) = intNO
Next
For i = 1 To 20
Cells(i, 1).Value = rndNO(i)
Next
End Sub
これは、トピック変えたほうがいいかもしれませんよ!!
>
> Dim rndNO(1 To 20) As Integer
> Dim intNO As Integer
> Dim p As Integer
> Dim t As Integer
>
> For p = 1 To 20
> t = 30
> Randomize
> rndNO(p) = Int(Rnd() * t) + 1 '1からtまでの乱数の発生
> intNO = rndNO(p)
>
> Do Until rndNO(p) <> intNO '同じ数字がでたら、違うまでループ
> ↑
> ここの式が思いつかないしわからない。
>
> rndNO(p) = Int(Rnd() * t) + 1
> intNO = rndNO(p)
>
> Loop
>
> Next
> コレクションを勉強したらなんていわないで、この配列を使って何とかならないものでしょうか。
> rndNO(p)が、今まで作った配列の中にあるかないかを調べるような式や関数をどなたか教えていただけないでしょうか? このコードからは無理ならば、諦めてシートを使います。
> よろしくお願いします。
|
|