| 
    
     |  | ▼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
 
 
 
 |  |