[[20180417231734]] 『ランダム数字生成時に条件を付けることはできます』(rano) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ランダム数字生成時に条件を付けることはできますでしょうか? 』(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


sy様
返答ありがとうございます。
出来れば1の方法でいきたいのですが、F9連打が嫌ならマクロを組めということですよね。
マクロは正直全然分かっていないので調べてみようと思います。

(rano) 2018/04/18(水) 07:20


1つ目は1〜100
2つ目は1〜99
3つ目は200から2つの数字を引く
でいいのでは?

で、それを混ぜて表示するか、並び替えて表示するか
すればいいのでは?
所詮、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(RANDBETWEEN((100-A2),100))
C2 =INT(RAND()*(200-A2-B2)+1)
ではどうでしょう?
外していたらごめんなさい。
(yo) 2018/04/23(月) 07:57

3つの数字とはいえ、答えが範囲内か確かめるための合計セルもあるかと思います。 先に合計が100〜200の範囲になるランダムを決めておいてから、これを3つに分けるように考えれば、常に一発で条件を満たすかと思いますが、いかがでしょうか?

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


yoさんの式の場合、A2+B2が常に100以上になりそうかな?
(???) 2018/04/23(月) 10:47

あ、私の式も不完全でした。C2が100を超える場合あり。 B2の式にもう一捻り必要です。
(???) 2018/04/23(月) 10:51

3数の組み合わせで、順は無視していいのなら、
A2 < B2 という条件を付けて、

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


上の回答は無視してください。(汗)
(hatena) 2018/04/23(月) 12:11

順は無視していいのなら、yoさんの回答(私のも)でいいように思えてきた。

合計が100以上という条件があるので、どれか2数の合計は100以上でないと成立しないので。
(hatena) 2018/04/23(月) 12:29


普通の例だと、30+40+50=120 という答えも成り立ちますが、どれ2つ足しても100いかなかったりします。こういう答えが絶対に出てこない数式でも認められるのかどうかですね。

極端な例だと、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.