|
▼ichinose さん:
こんにちは。
またまた、お世話になります。
乱数(重複なし)の発生は?に変えて質問させていただきます。過去ログにもあったのですが、どうも理解ができなくて…
ネット上(グーグル何かも)で調べたのですが、これっというものがなくて、(探し方が悪かったのかも)得意のsheetを使って、一度シートに書き出し、ようやく乱数(重複なし)に行き着いたのですが、どうも悔しくて…
いつもすみません。
いろいろな方法がありそうなので、もっといろいろと知りたいと思います。
>1.配列の中身をループで調べる方法
> 変数と変数の比較だから処理は速いですよ
↑
まず乱数 rndNO(1to20)を発生させて、for next で同じ数字があったら乱数を発せさせ、新しい乱数Bに追加して……ロジックが浮かばない。トホホ
>2.Application.Match関数を使う方法
> 配列にも使えます。但し、上限があります。
↑
提示されたコードで見事解決することができました。いつもながら、ありがとうございました。
Application.Match関数ですが、どういったものなのでしょうか?ヘルプをみても見つけることができませんでしたし、コードを書くときも候補として表示されませんでした。WorksheetFunction.Match関数と構文は同じように感じましたが……
IsError関数は、一致する数字がなくエラーが出るまで でよいのですよね。
本やヘルプで調べてみると、Blooleam型で TrueかFalseを返すのだから、=trueはいらないのでしょうか? とんちんかんの質問でしたら申し訳ありません。
関数を基本に子どもに役立ちそうなものを考え、関数でできないところをVBAで補っています。
ですから、必要なところを本やヘルプで調べてかじっているので、基本ができていません。いつも初歩的な質問ばかりで申し訳ありません。
>3.乱数を文字列として配列に格納する方法(Filter関数を使用する)
↑
これも本とヘルプを頼りにいろいろとコードを書いたのですが……実行時エラーばかりで、情けない。
sub tamesi()
Dim rndNO(1 To 21) As String
Dim intNO() As String
Dim p As Integer
Dim t As Integer
t = 30
For p = 1 To 20
Randomize
rndNO(p) = Int(Rnd() * t) + 1 '1からtまでの乱数の発生
intNO = rndNO(p)
Do While intNO = Filter(rndNO, rndNO(p)) '数字が同じ間ループ
rndNO(p) = Int(Rnd() * t) + 1
intNO = rndNO(p)
Loop
Debug.Print intNO
Next
|
|