• ベストアンサー

ランダム関数で任意の桁数のランダム数字を作りたい

エクセル2000ユーザーです。ランダム関数を使い、重複を許さない5桁のランダム数字を1000個作りたいと思っています。randbetween関数を使おうと思ったのですが、2000では使えないのか、NAMEといったエラー表示がでます。5桁の中は同じ数字がでてきても構いません。例:11295、43634、70676・・・etc。 が、1000個の中では同じ数字が重複しないようにしたいです。 =RIGHT(RAND(),5) のように考えたのですが、他にいい方法はありますでしょうか? マクロやVBAは苦手なので、できれば関数でいいやり方があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • korapisi
  • ベストアンサー率45% (16/35)
回答No.3

=RIGHT(RAND(),5) だと、末尾に0が連続するようなケースで不正な結果になってしまう可能性があります。 =RIGHT(INT(100000+100000*RAND()),5) というのはどうでしょうか? それから、1000/100000なので確率は低いかもしれませんが、重複はありえます。(100個に1個ぐらい) 1100個ぐらい生成して、重複するものは排除してください。

xyz123hanri
質問者

お礼

なるほど、そういう方法があるのですね。とても参考になりました!ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

RAND()*(上限ー下限)+下限 です。 重複出現なしとランダム性とは関係ないことなので、別のロジックで、限りなくそれに近い方法を勉強するほか無い。 乱数理論も難しく、エクセルしか使えないレベルではそのアルゴリズムを考え出しプログラムを作るのは難しいと思う。 さらに知りたいなら、数理のカテゴリに質問して、聞いてみるとかあるかとおもう。しかし回答が出ても、その用語や理論付けなど理解できない恐れが多い。 即時(リアルタイム)でないなら、エクセルのある列に行番号とともに乱数(もちろん重複アリ)をRANDOM関数で出し、値かして式を消し、乱数の列でソートして、行番号を乱数とするのもありえる。 同じ値もソートすると、何とか別行になり、行番号は違う数値になるから。 2007で無いと6万(行)以上の場合(本件)は出来ないが。 4桁2桁でやり結合するとか。 ただし出来た数字のランダム性の数学的な検証法などはわからない。 ーー それと、RANDBETWEENはアドイン関数 http://www.relief.jp/itnote/archives/001184.php の>[分析ツール]に含まれる関数ですから、利用するためには[分析ツール]アドインの組み込みが必要です。 辺りに注意。

xyz123hanri
質問者

お礼

丁寧なご回答ありがとうございます。まだまだ知識不足でこれからもっと勉強します。。ありがとうございました!

回答No.2

1000個の中で重複しないように…というのは簡単には思いつきませんでしたが、質問者さんはRANDBETWEEN関数を使って解決する方法は思いつかれているようなので、以下参考にしてもらえれば。 RANDBETWEEN関数を使って解決できるのなら、「分析ツール」アドインを組み込めば良いと思います。分析ツールが使えなければ =INT(RAND()*90000)+10000 が同じ結果になると思います。

xyz123hanri
質問者

お礼

アドインの組み込みできました。早いご回答とても感謝しています。ありがとうございました。

回答No.1

「ツール」→ 「アドイン」→ 「分析ツール」にチェックを入れて「OK」でrandbetween関数が使えるようになると思いますけど・・・

xyz123hanri
質問者

お礼

できました!ありがとうございました。