[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ランダム数字生成時に条件を付けることはできますでしょうか? 』(rano)
こんばんは。
ご存じの方がおられたら教えていただきたいのですが、Excelの機能で例えば
「合計が100〜200の間になる、1〜100のランダムな数字を3生成する」
といったような条件付けは可能なのでしょうか?
< 使用 Excel:Excel2010、使用 OS:Windows7 >
2通りの方法があると思います。
1、3つの1〜100の乱数を生成して、合計が100〜200の間に入らなければ、入るまで生成を繰り返す。
2、1つ目の乱数は、1〜100で生成、2つ目は1つ目との合計が199以内になるように上限を調整、 (上限を100にしても合計が199にならない時は、1〜100のまま)MIN関数で出来ます。 3つ目の乱数も同じ要領で、合計が200以内になるように上限を調整。
ランダム性を重視するなら、1つ目の繰り返しの方法と思いますが、マクロじゃないと再計算が邪魔くさいかも? 2つ目の上限の調整の方は、ランダム性では今一つですが、数式でも出来ます。
(sy) 2018/04/18(水) 06:23
2、の方法の時に、3つ目の乱数は、合計値が100以上になるように、下限値も調整の必要がありましたね。 下限値はMAX関数を使えば出来ます。
(sy) 2018/04/18(水) 06:26
(rano) 2018/04/18(水) 07:20
で、それを混ぜて表示するか、並び替えて表示するか
すればいいのでは?
所詮、Rand関数使ったからランダムだと言えるかどうかは微妙なのですし、
出てきた答えがランダムなのかを証明するのも簡単ではないのですから。
(まっつわん) 2018/04/18(水) 08:39
まっつわん さんへ
>1つ目は1〜100 >2つ目は1〜99 >3つ目は200から2つの数字を引くでいいのでは?
1つ目と2つ目が10と20だったら、3つ目は100を超えちゃいますよ?
(半平太) 2018/04/18(水) 12:11
> 1つ目と2つ目が10と20だったら、3つ目は100を超えちゃいますよ? おお、そか、失礼。
なんか思いついたらまた書くかも。。。^^;
(まっつわん) 2018/04/18(水) 13:09
>「合計が100〜200の間になる、1〜100のランダムな数字を3生成する」
1) 合計が100〜200の間になる、1〜100の数値の組み合わせをランダムに3例生成する? 2) 合計が100〜200の間になる、1〜100の3つのランダムな数値を1例生成する?
1) だったら、恐ろしいい...
(seiya) 2018/04/18(水) 13:19
A2: =INT(RAND()*100)+1
B2: =INT(RAND()*MIN(100,D2-A2-1))+1
C2: =D2-A2-B2
D2: =INT(RAND()*101)+100
(???) 2018/04/23(月) 10:39
A2: =INT(RANDBETWEEN(1,98))
B2: =INT(RANDBETWEEN(MAX(A2,100-A2),99))
C2: =INT(RANDBETWEEN(MAX(,1,100-A2-B2),200-A2-B2))
でどうだろう?
完全にランダムな生成ではなく偏りはありそうですが。
(hatena) 2018/04/23(月) 12:03
合計が100以上という条件があるので、どれか2数の合計は100以上でないと成立しないので。
(hatena) 2018/04/23(月) 12:29
極端な例だと、98+1+1=100 でも良いわけで、これも100になりません。
逆の例だと、100+99+1=200 でも良いわけで、これが思ったよりムズカシー!
私の案の場合、A2は「=INT(RAND()*MIN(D2-2,100))+1」で良さそうだ、というところはすぐ思いついたのですが、B2は案外深いという事が判り、お仕事に戻ってしまいました…。
(???) 2018/04/23(月) 14:54
A2: =RANDBETWEEN(1,MIN(D2-2,100))
B2: =RANDBETWEEN(MAX(D2-A2-100,1),MIN(D2-A2-1,100))
C2: =D2-A2-B2
D2: =RANDBETWEEN(100,200)
(???) 2018/04/23(月) 17:32
>出来れば1の方法でいきたいのですが、F9連打が嫌ならマクロを組めということですよね。 >マクロは正直全然分かっていないので調べてみようと思います。 と言う事なので、今頑張ってらっしゃるのかな? ギブアップの時はコードを提示しますので言って下さい。 但しマクロそのものの使い方は勉強して下さい。
皆さん数式案で盛り上がってるので、ちょっと気になる点を、 1〜100の3つの乱数の合計が、100〜200になる組み合わせ数は、114444通り(順は無視です)あるので、 数式でもその全ての組み合わせが成立する事が必須とすれば、 条件は以下の3つを満たすものになると思います。
1)3つの乱数は、全て1〜100の範囲 2)3つの乱数の合計は、100〜200の範囲 3)114444通りの組み合わせ全てが成立する可能性を持たせる
yoさんの式ですけど、 A2が100の時に、B2が0の時があります。 1)に違反 A2が100、B2も100の場合があるので、合計201になるパターンがあります。 2)に違反 1)を満たす時、ちょうど100になる組み合わせが作れません。 3)に違反 のパターンがあり833通り分の組み合わせが作れません。
hatenaさんの式ですけど、 A2+B2が必ず100以上になるので、33,34,35 のような組み合わせが作れません。 3)に違反 14297通り分の組み合わせが作れないです。
D列を使わずに、上記3つの条件を満たすなら(sy) 2018/04/18(水) 06:23で提示した考え方で良いと思います。 式で表すと以下になります。 A2 =RANDBETWEEN(1,100) B2 =RANDBETWEEN(1,MIN(100,199-A2)) C2 =RANDBETWEEN(MAX(1,100-A2-B2),MIN(100,200-A2-B2))
(sy) 2018/04/23(月) 20:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.