- ベストアンサー
エクセルで3ケタの乱数
今度くじ引き大会をするのに3ケタの数字を250名ほどに配りたいのですが、それぞれの数字が重複なくかつ各桁数の数字が重複しないで乱数をエクセルで生成する方法を教えてください。(例えば、101,221,199などは除外したいです) RAND,RANDBETWEEN関数を使ってみましたが、重複してしまうし、221などのような各桁で数字が重複してしまうものができてしまうのでうまくいきません。 よろしくお願いします。
- その他(業務ソフトウェア)
- 回答数8
- ありがとう数1
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>簡単に説明をお願い 数式自体はごく単純なつくりです。回答の手順を間違いなく行っていれば、数式はあなたがふつーに使っている関数だけで構成されていると思いますが? ABC列に記入したのはあなたがヤリタカッタその通り、 1)(D列に表した)それぞれの数字が重複なく(最初のCOUNTIF) 2)(ABC3列の)各桁数の数字が重複しない(2つ目のCOUNTIF) 数字が表れるまで、エクセルに繰り返し0~9の乱数を発生(INT(RAND()*10))させ、条件をクリアして計算が止まるまで繰り返し計算(=探索)させています。 D列は計算を簡単にするため、ABC列の3つの数字をくっつけて一つにしているだけです。 E列は結果の確認用で、探索には使っていません。 250行ぐらいまでなら問題なく探索は終了する(確認用のE列にすべてOKが並ぶ)と思いますが、もっと沢山の行数を計算させようとすると、一回の探索ではNGが残る可能性もあります。その時はF9キーを押すことでもう1サイクル探索を続行し、NGが無くなるまで繰り返します。 (他の方からも言われているように、全部で720通りの数字があります。最後の数個まで漏れなく探索しようとすると、結構時間がかかります。もしそういう網羅的な方法をしたいなら、000から999までの数字をまず並べて、条件に満たない(NGの)行を取り除いていった方が遥かに簡単です) 一般的にRAND関数をふつーに使うやり方では、何かの拍子で再計算が走る都度、これまでの計算結果がすべてお釈迦になってまた最初から全部やり直しになりますが、回答した手順は条件を満たした行ではそれ以上再計算させず、NGの行だけが探索するように仕込んであります。 もしも新しい乱数の組み合わせを再度やり直したくなったら、2行目以下をいったん消去し、A1:E1を改めてコピーして目的の行数分貼り付け直して下さい。
その他の回答 (7)
- chieffish
- ベストアンサー率44% (1149/2554)
1000個も有るはず無かった。 001とかは3桁とは言えないかも知れないので102から987までの648個 作ってみた。 http://pupld.net/14/121231/d2018id8re/index.cgi
- chieffish
- ベストアンサー率44% (1149/2554)
250個でも1000個でも誰かに作っていただいて、どこかにアップしてもらった方が・・・・
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答:No.4の方法を一般化して、3桁以上の桁数の乱数を作る際にも応用が利く様にした方法です。 まず、D1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>FACT(10)/FACT(10-COLUMNS($F:$H)),"",RAND()) 次に、F1セルに次の関数を入力して下さい。 =IF($D1="","",MID(IF(COLUMNS($F:F)=1,"0123456789",IF(COUNTIF(E1:$F1,"0"),"",0)&IF(COUNTIF(E1:$F1,"1"),"",1)&IF(COUNTIF(E1:$F1,"2"),"",2)&IF(COUNTIF(E1:$F1,"3"),"",3)&IF(COUNTIF(E1:$F1,"4"),"",4)&IF(COUNTIF(E1:$F1,"5"),"",5)&IF(COUNTIF(E1:$F1,"6"),"",6)&IF(COUNTIF(E1:$F1,"7"),"",7)&IF(COUNTIF(E1:$F1,"8"),"",8)&IF(COUNTIF(E1:$F1,"9"),"",9)),MOD(ROWS($1:1)-1,10-COLUMNS($F:F)+1)+1,1)) 次に、F1セルをコピーして、G1~H1の範囲に貼り付けて下さい。 次に、E1セルに次の関数を入力して下さい。 =IF($D1="","",SUMPRODUCT($F1:$H1*10^(COLUMN($H1)-COLUMN($F1:$H1)))) 次に、B1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>COUNT($D:$D),"",VLOOKUP(SMALL($D:$D,ROWS($1:1)),$D:$E,2,FALSE)) 次に、B1~H1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 これで、B列に「それぞれの数字が重複なくかつ各桁数の数字が重複しない乱数」が表示されます。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答:No.3とは別の方法です。 まず、D1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>10*9*8,"",RAND()) 次に、F1セルに次の関数を入力して下さい。 =IF($D1="","",MID("0123456789",MOD(INT((ROWS($1:1)-1)/9/8),10)+1,1)) 次に、G1セルに次の関数を入力して下さい。 =IF($D1="","",MID(SUBSTITUTE("0123456789",$F1,),MOD(INT((ROWS($1:1)-1)/8),9)+1,1)) 次に、H1セルに次の関数を入力して下さい。 =IF($D1="","",MID(SUBSTITUTE(SUBSTITUTE("0123456789",$F1,),$G1,),MOD(ROWS($1:1)-1,8)+1,1)) 次に、E1セルに次の関数を入力して下さい。 =IF($D1="","",($F1&$G1&$H1)+0) 次に、B1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>COUNT($D:$D),"",VLOOKUP(SMALL($D:$D,ROWS($1:1)),$D:$E,2,FALSE)) 次に、B1~H1の範囲をコピーして、B2~H720の範囲に貼り付けて下さい。(各桁の数値が重複しない組み合わせは10×9×8=720通りです) これで、B列に「それぞれの数字が重複なくかつ各桁数の数字が重複しない乱数」が表示されます。
- kagakusuki
- ベストアンサー率51% (2610/5101)
まず、D1セルに次の関数を入力して下さい。 =IF(AND(LEN(ROW()+101)=3,SUMPRODUCT((LEN(SUBSTITUTE(ROW()+101,MID(ROW()+101,{1,2,3},1),))<2)*1)=0),RAND(),"") 次に、D1セルをコピーして、D2~D886の範囲に貼り付けて下さい。 次に、B1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>COUNT($D:$D),"",MATCH(SMALL($D:$D,ROWS($1:1)),$D:$D,0)+101) 次に、B1セルをコピーして、B2~B648の範囲に貼り付けて下さい。 すると、B列に「それぞれの数字が重複なくかつ各桁数の数字が重複しない乱数」が表示されます。 尚、下の添付画像におけるA列の数字は、単なる連番です。 又、E列の数字は「各桁数の数字が重複しない3桁の数字」をしらみつぶしに表示したもので、F列の数字は、E列の数字の表示する順番を表したものです。 (もし、質問者様が御利用になられているサイトでは、画像が表示されていない場合には、次のURLのページを御覧下さい http://okwave.jp/qa/q7866017.html) これら、A列、E列、F列の数字は、あくまで解り易くするために表示させたものであり、B列とD列さえあれば、A列、E列、F列が無くとも乱数は表示されます。 あとそれから、RAND関数やRANDBETWEEN関数を使って乱数を発生させた場合、Excelで計算が行われるたび(ファイルを開く際や保存する際にも再計算は行われます)に、乱数のリストが変更されてしまいますので、1度表示された乱数のリスト全体をコピーして、どこか適当な列に値のみを貼り付ける事で、保存されておかれる事を御勧め致します。
- keithin
- ベストアンサー率66% (5278/7940)
エクセルに探索させてみます。 手順: ご利用のエクセルのバージョンが不明ですが、エクセルのオプションで「反復計算」のチェックを入れる A1に =IF(OR(COUNTIF($D$1:$D1,$D1)>1,COUNTIF($A1:$C1,A1)>1),INT(RAND()*10),A1) と記入、B1、C1にコピー貼り付ける D1に =A1&B1&C1 と記入 E1に確認用に =IF(AND(COUNTIF(D:D,D1)=1,COUNTIF(A1:C1,MEDIAN(A1:C1))=1),"OK","NG") と記入 A1:E1を下向けに250までコピー貼り付けて完成。
- Cupper-2
- ベストアンサー率29% (1342/4565)
んじゃ、テーブルでも作りますか。 000から999までのね。 でもって各桁の数字が重複している値を読み取る値から除外する。 除外したテーブルの値に810まで数字(シリアルナンバー)を振る。 RAND関数で1から810までの乱数を発生させる。 でもって、生成された乱数をテーブルと付き合わせて値を決める。 この方法は除外したい値を任意に決めることができるので 各桁の数値が重複していないだけでなく連番も除外したいとか、そんなわがままにも対応できます。 または、各桁毎に乱数を発生させて後で組み合わせましょう。 百の桁に対して0から9までの乱数を発生させる。 十の桁に対して0から8までの乱数を発生させる。 でもって百の桁に設定した数値以上の値が出たら1を足す。 一の桁に対して0から7までの乱数を発生させる。 でもって百の桁に設定した数値以上の値が出たら1を足す。 さらに十の桁に設定した数値以上の値が出たらもう一度1を足す。 各桁の数字を並べて最終の値とする。 いろいろなやり方がありますが、自分でやりやすいと思った方法で試してみましょう。 なお、各桁の数値が重複しない組み合わせは 10×9×8 ですので810個ですね。
関連するQ&A
- エクセルで、乱数の関数 同じ数が無いように
乱数を発生させる関数で、RAND関数は、小数点(0~1の間)で、RANDBETWEEN関数は整数で出るとのことですが、RANDBETWEEN関数は同じ数字がいくつか重複して出ます。整数で同じ数が出ないようにする関数はないでしょうか?
- ベストアンサー
- その他MS Office製品
- EXCELでの、3桁の擬似乱数生成方法について質問です。
EXCELでの、3桁の擬似乱数生成方法について質問です。 エクセルで、3桁の擬似乱数をいくつもランダムに生成するにはどのようにすればよろしいでしょうか? 重複する可能性も含んだ擬似乱数の生成方法、宜しくお願い致します。
- 締切済み
- オフィス系ソフト
- エクセルで乱数を作成する方法
質問させて頂きます。 エクセルで、9桁(000000001~999999999)の乱数を作成する方法(関数)を教えて下さい。 イロイロ試してみたのですが、小数点になってしまったり、桁数が合わなかったり(9桁以下になったり)、数値が重複したりしてしまいます。 過去にあった質問かもしれませんが困っています。 宜しくお願いいたします。
- 締切済み
- オフィス系ソフト
- エクセル 任意の数字から始まる重複しない乱数
お世話になります。 エクセル2003/XP 使用です。 RANK関数またはそれに似た利用方法でご教授願いします。 下記ページを参考に、"重複しない乱数”を作成しました。 http://www.relief.jp/itnote/archives/001798.php (ページ中程、▼操作手順:重複しない乱数を作成する 以下の部分) 乱数の最初の数字が1から始まる分には問題なくできるのですが、 乱数の数字を、「任意の数字から始めて」、 「任意の数字で終わる」ようにすることは可能でしょうか? 例えば、下記の例でいうと、 6から始まり10で終わる乱数です。 A列 B列 1行目 / =RAND() / 1-5の範囲でランダムな重複しない乱数 2行目 / =RAND() / 同上 3行目 / =RAND() / 同上 4行目 / =RAND() / 同上 5行目 / =RAND() / 同上 ------------------------------------------------------------ 6行目 / =RAND() / 6-10の範囲でランダムな重複しない乱数 7行目 / =RAND() / 同上 8行目 / =RAND() / 同上 9行目 / =RAND() / 同上 10行目 / =RAND() /同上 (11以下、繰り返し 略) よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ランダム関数で任意の桁数のランダム数字を作りたい
エクセル2000ユーザーです。ランダム関数を使い、重複を許さない5桁のランダム数字を1000個作りたいと思っています。randbetween関数を使おうと思ったのですが、2000では使えないのか、NAMEといったエラー表示がでます。5桁の中は同じ数字がでてきても構いません。例:11295、43634、70676・・・etc。 が、1000個の中では同じ数字が重複しないようにしたいです。 =RIGHT(RAND(),5) のように考えたのですが、他にいい方法はありますでしょうか? マクロやVBAは苦手なので、できれば関数でいいやり方があれば教えてください。
- ベストアンサー
- オフィス系ソフト
- Excelでロト6の数字を決めたい
Excel関数を使って、「1~43の数字から重複しない6個の数字を算出する」方法ってありますか?マクロはよくわからないので関数で出したいです。いろいろ調べて、「RAND」とか「RANDBETWEEN」を使うといいとわかったのですが、「重複しない」ようにすることができません。お分かりになる方いらしたら、ぜひ教えて下さい。ずっと考えていたら頭が痛くなってきました・・・。
- ベストアンサー
- オフィス系ソフト
- エクセルで「乱数」を出す@関数は?
「1-2-3」では、乱数を出す関数は「@INT(@RAND*400)+1」で1~400の間のアットランダムな乱数をさながらサイコロのように出すことが出来るのですが、エクセルではそういう関数があるのでしょうか? 是非教えて下さい。
- ベストアンサー
- その他(ソフトウェア)
- エクセルで重複しない乱数の発生
今エクセルで正負の数の足し算の100ます計算を作っていたのですが、 どうしても乱数表示をさせている所のどこかで数字が重複してしまい困っています。 なにかいい式はありませんでしょうか? ちなみに乱数の数字の範囲は-10~10にする為に、 =INT(RAND()*(10+10)-10) という式でやっています。 素人質問ですがよろしくお願いします<(_ _)>
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。出来ました!!しかし、せっかくなので簡単に説明をお願いしてもよろしいでしょうか?関数の部分が少し複雑で理解できません。