• 締切済み

重複しない整数をランダム表示

エクセル98を使用しています。 例えば3つのセルに1~5の数字をランダムに、重複させないように表示させることはできるでしょうか? 作業用のスペースを使用して、いくつか処理を加えれば可能なのですが、関数を組み合わせてもっとスマートにできる方法はないかと思い、ダメ元で質問させて頂きました。 大したことではないのですが、いいアイディアがある方はアドバイスを頂けると助かります。

みんなの回答

  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.9

#6です。 #7様に指摘されたとおりです。 INTは切捨てでした。 #6の回答を B1:=INT(RAND()*(B2-2))+2 に訂正します。 #7様、有難うございましたm(__)m

全文を見る
すると、全ての回答が全文表示されます。
回答No.8

#5、#7の補足です。 4つ目の重複しないランダムな数字 D1セル =MOD(MOD(MOD(INT(RAND()*17)+(LARGE(A1:C1,1)-LARGE(A1:C1,2)),18)+(LARGE(A1:C1,2)-LARGE(A1:C1,3)),19)+MIN(A1:C1),20)+1 5つ目の重複しないランダムな数字 E1セル =MOD(MOD(MOD(MOD(INT(RAND()*16)+(LARGE(A1:D1,1)-LARGE(A1:D1,2)),17)+(LARGE(A1:D1,2)-LARGE(A1:D1,3)),18)+(LARGE(A1:D1,3)-LARGE(A1:D1,4)),19)+MIN(A1:D1),20)+1 のようにMOD、LARGE関数を追加していく事で対応できますが、 関数の文字列は最大何文字までか忘れましたが、限度があると思いますので、いくつでも出来る関数ではありませんね。 同じ数式の繰り返しなのでスマートに出来そうなのですが、ひらめきませんでした。

全文を見る
すると、全ての回答が全文表示されます。
回答No.7

#5で回答した者です。   0shieteさん疑問です。   B1:=INT(RAND()*(B2-3))+2では例えばB2=20だった場合、   Int(Rand()*17)+2で2~18までの数字のランダムになると思うのですが、   B1:=INT(RAND()*(B2-2))+2ではありませんか?     (間違っていたらすみません) ------------------------- #5の考え方です。(といっても説明しにくいので1つずつの関数を見ていくだけですが) 関数の下の()内の数字はランダムで取得できる数字の範囲です。 (1)A1セル   =INT(RAND()*20)+1       (1~20) (2)B1セル(A1=12と仮定すると)    =INT(RAND()*19)       (0~18)    =INT(RAND()*19)+A1       (12~30)    =MOD(INT(RAND()*19)+A1,20)       (0~10、12~19)    =MOD(INT(RAND()*19)+A1,20)+1       (1~11、13~20)      で12を除いた1~20の数 (3)C1セル(B1=7だったと仮定すると ABS(A1-B1)=A1-B1の絶対値=5、           MIN(A1,B1)=A1とB1の小さい方=7)    =INT(RAND()*18)       (0~17)    =INT(RAND()*18)+(ABS(A1-B1))       (5~22)    =MOD(INT(RAND()*18)+(ABS(A1-B1)),19)       (0~3、5~18)    =MOD(INT(RAND()*18)+(ABS(A1-B1)),19)+MIN(A1,B1)       (7~10、12~25)    =MOD(MOD(INT(RAND()*18)+(ABS(A1-B1)),19)+MIN(A1,B1),20)       (0~5、7~10、12~19)    =MOD(MOD(INT(RAND()*18)+(ABS(A1-B1)),19)+MIN(A1,B1),20)+1       (1~6、8~11、13~20)       で7、12を除いた1~20の数 A1セルとB1セルは仮定で数字を入れましたが他の数字でも問題ないと思います。 試してみてください。

全文を見る
すると、全ての回答が全文表示されます。
  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.6

3つのセルの場合について、考えました。 B2にはランダムに表示させたい最大数が入っているものとします。 (1~Nの数字を表示させたいならNをB2に) A1:=INT(RAND()*(B1-1))+1 B1:=INT(RAND()*(B2-3))+2 C1:=IF(B1=(B2-1),B2,INT((B2-B1)*RAND())+B1+1) が今回考えた式です。 考え方は、 まず、B1で一つ数字を決め A1のセルには1~B1の値でサイコロを振り、 C1のセルにはB1の値~B2の値でサイコロを振る という考え方です。 ですから、必ず、A1<B1<C1の関係がでてきます。 また、B2の値が小さすぎるとき、(B2=4の時) は、出てこない組み合わせがあります。

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

私も考えてみました。 20までの重複しない数字を拾います。 (1) A1: =INT(RAND()*20)+1 B1: =MOD(INT(RAND()*19)+A1,20)+1 C1: =MOD(MOD(INT(RAND()*18)+(ABS(A1-B1)),19)+MIN(A1,B1),20)+1 でどうでしょうか? (一応テスト中には重複した数字は出てきませんでしたが、確認してみてください) (2)ユーザー定義関数(VBAがわかる方でしたら) 標準モジュールに ---------この下から----------- Function RandA(Rn As Range, SI As Integer, EI As Integer)   Dim Cl As Range  '検索セル   Dim Er As Boolean '重複フラグ   Dim Nm As Integer 'ランダム数      If (Rn.Count > EI - SI) Then       'ランダム数字の個数よりセル数が多い場合     RandA = "Error"           '戻り値にエラーを設定     Exit Function   End If      'ランダム数設定   Do     Nm = Int(Rnd() * (EI - SI + 1)) + SI 'SI ~ EI までのランダム数設定     Er = False              '重複フラグを解除     For Each Cl In Rn       If (Cl.Value = Nm) Then     '重複数字がある場合         Er = True           '重複フラグを設定         Exit For       End If     Next Cl   Loop While (Er = True)          '重複フラグが解除されるまでDo...Loopを繰り返す   RandA = Nm                '戻り値にランダム数を設定 End Function ---------この上まで----------- を貼り付けて A1セル =INT(RAND()*20)+1 A2セル =randa(A1,1,20) A3セル =randa(A1:B1,1,20) ※=randa(範囲,開始数字,終了数字)   開始数字から、終了数字までの間で、範囲にない数字をランダムで表示 という方法もあります。(VBAの方はあくまでサンプルです) 間違っていたり、わからない事があれば、補足してください。

全文を見る
すると、全ての回答が全文表示されます。
  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.4

補足の書き込み有難うございます。 2桁の場合についてもお考えになっている とのことですので、 参考になるかどうかわかりませんが、 以前、私が回答したものを挙げさせていただきます。 「ロト6の数字をどうやって決めるか」という質問です。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=507176
全文を見る
すると、全ての回答が全文表示されます。
  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.3

#2様の回答を読んで思いついたので、回答させていただきます。 #2様のrand()の部分をrandbetween()を使っては いかがでしょうか? A1  =MID("12345",RANDBETWEEN(1,5),1) B1  =MID(SUBSTITUTE("12345",A1,),RANDBETWEEN(1,4),1) C1  =MID(SUBSTITUTE(SUBSTITUTE("12345",A1,),B1,),RANDBETWEEN(1,3),1) RAND()がゼロを返す場合がなくなります。

cuty_girl
質問者

補足

御回答ありがとうございます。 randbetween()関数ですが、エクセル98なので実装されていないんです(T_T) この関数があれば、ちょっと楽になるんですけどね~。 1~10の中から選択するなど、2桁も含めた場合の方法も現在試行錯誤中です。 何か良いアドバイスがありましたら、よろしく御願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • comv
  • ベストアンサー率52% (322/612)
回答No.2

こんばんは こんな感じで如何でしょうか A1  =MID("12345",ROUNDUP(RAND()*5,0),1) B1  =MID(SUBSTITUTE("12345",A1,),ROUNDUP(RAND()*4,0),1) C1  =MID(SUBSTITUTE(SUBSTITUTE("12345",A1,),B1,),ROUNDUP(RAND()*3,0),1) RAND()の結果が0の場合のみ支障がありますが 発生確率上無視してよいと思います。

cuty_girl
質問者

補足

御回答ありがとうございます。 数式を見て、「なるほど~」って思ってしまいました(^^; すでに選ばれた数字を抜き取って、その中からまたランダムに選択して行くって方法ですね。 RAND()で0が発生しないように、下記のようにアレンジを加えてみました。 A1 =MID("12345",INT(RAND()*5)+1,1) B1 =MID(SUBSTITUTE("12345",A1,),INT(RAND()*4)+1,1) C1 =MID(SUBSTITUTE(SUBSTITUTE("12345",A1,),B1,),INT(RAND()*3)+1,1) 大したアレンジでもないですけどね(^^; 今の所は、選択する数字が少ないので良いのですが、これが1~10の中から、となった場合は、この方法は使用できないですよね。 1桁の内は何とか大丈夫そうですが、選択する数字は今後どんどん増えて行くので、2桁になった場合も考えてみようと思います。 2桁の場合のいいアイディアがありましたら、アドバイスして頂けると助かります。

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

VBAでやるのかな? 普通は、並び替えで実現します。 1から5まで 配列に それぞれの 数字(1から5まで順に入れます) それで ランダムで 1から 5までの数字を二つ出します。 例 a(1)からa(5)まで 1から 5入れてるとします。 ランダムで 2と 3が出たとします。 a(2)の値と a(3)の値を交換します。 これを 何回か繰り返すと ランダムな a(1)からa(5)までが できます。 って わかるかな?

cuty_girl
質問者

補足

御回答ありがとうございます。 VBAでも良いのですが、よくVBAが分からないので関数でやってみたいと思っています。 VBAの方が簡単であれば、そっちを使用したいと思いますが。 ん~、せっかく回答して頂いたのですが私の頭では理解できませんでした(ー_ー; 要するにランダムで2つの数字を発生させて、あらかじめ入力していた数字の中で、ランダムで出て来た数字どうしを入れ替えるということでしょうか? でもこの方法だと、かなり手順を踏まないといけないような気がするのですが、私の理解方法が悪いのかな。 できれば、一発で1~5の数字の中から3つをランダムで表示できるようにしたいと思っています。 いいアイディアがピンときましたら、またアドバイスを御願い致します。 私の方も試行錯誤してみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【エクセル】ランダムで重複しない整数を出したい。

    Windows 7、エクセル2007です。 ランダムで重複しない整数を任意の範囲から一部のみ入力するにはどうしたら良いでしょうか? 1.任意の範囲「1~50」とか「1~100」とか「15~300」とかから、20個だけとか40個だけとか。 2.ランダムなので「2,6,3,4,8,1・・・」とかのn、n+1、n+2ではないランダムな整数。 3.重複しないこと。 上記1~3を満たしたやり方ってありますか? 出てこない数があっても良いんです。 例えば、1~10までの範囲でランダムに3個だけセルに入力したいとき。 A1に7、A2に4、A3に9というふうに。 それが1~300の範囲で50個の数字をランダムに重複しないように入力する。 A1に15、A2に163、A3に92、・・・A50に43。 残りの250個の数字は入力されないという感じです。 乱数だと重複します。 ランク(順位)と組み合わせると、連続(n、n+1、n+2)になってしまいます。 列はどこでも良いんですが、行は連続したいです。 A1~A50とか、A1~A300とか。 関数の組み合わせでできないでしょうか? また、マクロは分からないので、詳しく解説して頂けると助かります! 情報が不足する点がありましたら指摘して下さい。 追加します。

  • Excel で 10個のセルに、0から9を一つ一つランダムに表示したい

    子供の算数の問題を作成するために考えているのですが、Excel で10個のセルに、0から9を一つ一つランダムに表示したいのです。ただ、一度使用した数字は、二度と使用しないようにするためにいい方法はないでしょうか。 例1 2.5.8.6.3.9.7.4.1.0 例2 1.4.7.2.0.5.8.3.6.9 など、乱数等を使用した方がいいと思うのですが、if関数は、最大7つまでしか、判断だきないそうです。 ランダムであり、一度使用した数字は、使用せず、0から9をそれぞれ表示する方法は、ないでしょうか。 よろしくお願いします。

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

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

  • 重複数字を削除して表示させるには

    またまたお世話になります。 例えば下記のように左のセルから1つずつ数字が入っているとします。 1 2 3 3 4 5 これを下記のように重複数字を削除して並べたいと思っています。 1 2 3 4 5 できれば空白セルがないようにしたいです。 ×:1 2 3   4 5 ○:1 2 3 4 5 関数を使用してできますでしょうか? 空白セルがないようにするのがネックになっています。 アドバイスを御願い致します。

  • エクセルでランダム表示したい

    エクセルのセルA1からセルA20までとか「MM/DD/YYYY hh:mm:ss」の形式でランダム表示させる関数なんてあるでしょうか? できれば、3月1日~5月31までとか期限を制限してランダムに表示できたらうれしいです。

  • ランダムに6つの数字を選びその際、数字が重複しない様にする方法が知りたいです。

    6個の枠があり、ボタンを押すとそれぞれの枠に ランダムに1~43の数字が表示できるようにしたいです。 その際それぞれの数字が重複しない様にしたいです。 ランダムに数字を選ぶようには、何となく解りますが、 重複しない様にする方法が解りません。 よろしくお願いします。

  • Excelでのランダムな整数の出し方

    A1のセルに、ルーレットのようにランダムな整数を 表示させたい時は、 =INT(RAND()*10) という関数を使うのだと思いますが、 これだと0~9までが均等に出現しますよね。 A1には、0,1,2の3つのみを ランダムに出現させたい、という場合は どのように設定すればいいのでしょうか? 宜しくお願いします。

  • エクセル関数?でランダム入力について

    エクセルにて質問です。 一つのシートで横列(アルファベット)は同じで、縦列(数字)は二列ずつのセットで… もしセル R11に何もなければ(空欄なら)→ A11からBP12までのセルを薄い灰色で塗りつぶす もしセル R11に何かあれば→ Y11に15~22までのランダムの数字 Z11に0~59までのランダムの数字 BC11に8~11までのランダムの数字 BD11に0~59までのランダムの数字 ……… ……… ……… もしセル R39に何もなければ(空欄なら)→ A39からBP40までのセルを薄い灰色で塗りつぶす R39に何かあれば→ Y39に8 Z39に0~59までのランダムの数字 BC39に12~17までのランダムの数字 BD39に0~59までのランダムの数字 というものを作成したいのです。 尚、ランダム数字の値は上記の様に変更可能なものを希望です。 上記の内容になりますと、複数セルの塗りつぶしが含まれるので関数だけでは無理でしょうか? また、マクロ使用で可能ならコードを教えてもらえたら助かります。 エクセルに詳しい方おしえてください。 よろしくお願いします。

  • エクセルでランダムな座席表を作成したい

    excel 2003を使用しています。 エクセルで、100名程度の座席表を作成したいと思っています。 今、机の絵をレイアウトどおりに表示させて、該当する机に社員番号を入れれば、社員名が表示されるように設定しています。 席替えを毎日行うので、1-100の数字をランダムかつ重複せずに入れて、簡単に座席変更をしたいのですが、方法がわかりません。RANDBETWEENだと、ランダムに数字が入りますが、重複してしまい、困っております。 ランダムに数字を入力でき、かつ重複しない方法を教えてください。 どうぞよろしくお願いいたします。

  • Excel2002 ランダムに並べ替える関数

    Excel2002で掛算九九の100マス計算を作っています。 マクロを使って、ボタンにマクロを登録し、九九の問題を作成したいのです。 1~10の数字をランダムに重複しないように、A1:J1に表示したいです。 A B C D E 1 9 7 8 1 2・・・ 2 2 3 8 4 1 5 4 でA1:J1の1~10の数字ををランダムに並び替えたいのですが、そういった関数はありますか? RANDBETWEEN関数を使ってみたんですが、重複する数字が返ってきてしまいます。 何か良い方法はありますか?

専門家に質問してみよう