アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある条件で、ランダムな数値を作成したいのです。
条件の数値は必ずしも、いつも同じではないのですが、
3つの条件指定をしたいです。

平均値(例えば100)
数値の個数(例えば45)
数値の分布幅(例えば88~107)
上記の条件を指定します。

わかりやすいように、商品の値段と仮定して説明いたしますが、
¥100の商品が45個あれば、平均の値段は当然¥100になります。
ですが、この話の肝なのですが、¥88~¥107までの幅で、ランダムに値段を決め、結果的に平均値が¥100になるようにしたいのです。

このようなことができるのはエクセルかなぁ、と思い、一応このカテゴリに質問いたします。
もしかしたら、乱数を作るソフトなどあれば、アドバイスいただきたいと思います。

A 回答 (7件)

乱数を使って、平均値を100円にするのは困難でしょう。


乱数は多数回、発生させると一様な出現回数になると思います。
ですから、平均=(88+107)/2=97.5となり100にはならないでしょう。

そこで、代案ですが45個の乱数を発生させて平均値を求め、その差額を加算するというのはいかがでしょう。
A2~A46 =RANDBETWEEN(88,107)
B2 =100-AVERAGE(A2:A46)
A2 =ROUND(A2+$B$1,0) 下へCopy
平均に端数は出ますが、その辺は応用で・・・
    • good
    • 0

 乱数にはいろいろ種類があります。

RAND()は矩形乱数というものです。一般によく観察されるのは正規分布乱数、あるいは二項分布乱数です。ポアソン乱数というのもあります。
 まず、それを指定しないと回答できないと思います。
    • good
    • 0

>平均値


乱数を作り、その平均をXとする。個々のデータ全てに、Xと100の差をたす(場合によっては引く)と平均を100にした数を作れると思う。
しかしデータ範囲に影響するので難しい。
理論的に平均を縛ることが、乱数性を乱さないのか、数学の理論的知識が無くてわからない。
>数値の分布幅(例えば88~107)
これだけなら、エクセルにはRANDBETWEEN
関数が在る。WEBで照会のこと。
>数値の個数(例えば45)
45セルに関数を入れれば済むのでは。
式はセルごとに複写する。
再計算の都度(セルに式の複写の機会にも)更新されるから、45セルの乱数が作れたら、セルの値をそのセルに複写して、式を消すことが必要と思う。
ーー
これは本当はエクセルの質問ではなかろう。数学のカテに質問して、妥当性をチェックしてもらったほうがよい。そういう人は(エクセルは今や国民的必須教養で)、必ず知っているから、そちらの回答の方が信を置けると思う。
ーー
>乱数を作るソフトなどあれば
乱数というのは数学的に奥が深いように思う。だから諸理論や方法で
色々方式があるように思う。
Googleで「乱数を作るソフト」で照会すると記事が出る。
ーー
それにしても、大げさな質問だが、何に(どういうことに)使うのかな。
参考に「擬似乱数」の解説を、読んでおいたら。
http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC% …
    • good
    • 0

マクロでそれらしい数値になるように作って見ました。


やっている事は、平均値をA列に個数分並べて、行を2つ選んで最大値/最小値を超えないように適当な値をプラス/マイナス を、繰り返しています。
乱数とは言えませんが、「それらしい」数値にはなるかと思います。

Sub Sample()
 nAve = 100 '平均値
 nCount = 45 '個数
 nMin = 88 '最小値
 nMax = 107 '最大値

 '平均値を個数分A列に並べる
 For i = 1 To nCount
  Cells(i, 1) = nAve
 Next i
  
 Randomize '乱数初期化
 '並び替えを全体に何回か行う(有る程度やると乱数らしくなる)
 For j = 1 To (Int(Rnd() * 5) + 1)

  'A列1行づつ処理
  For k = 1 To nCount 'kが処理行
   '対にする行を乱数で選択
   nTarget = Int((nCount - 1) * Rnd) + 1
   '乱数で選択された行が処理行で無い場合処理続行
   If k <> nTarget Then
    nkDif = nMax - Cells(k, 1) '最大値と処理行の値の差
    ntDif = Cells(nTarget, 1) - nMin '最小値と選択行の値の差
    
    '0~「上の2つの差の内、小さい方」の範囲で乱数作成
    nwork = Int(Rnd * (1 + Application.Min(nkDif, ntDif)))
    
    Cells(k, 1) = Cells(k, 1) + nwork '処理行の値に作った乱数をプラス
    Cells(nTarget, 1) = Cells(nTarget, 1) - nwork '選択行の値に作った乱数をマイナス
   End If
  Next k
 Next j
End Sub
    • good
    • 0

>条件付きで、ランダムな数値~~


ある条件が付けば、それはランダムではなくなるはずでは?

>平均値(例えば100)
>数値の分布幅(例えば88~107)
となるような母集団はいくらでもあり得るので、どのようなものを想定するかで得られる値はまったく変わってきます。
母集団分布の例を添付の図に示します。

それぞれの場合で86~107までの積分値が1となり、かつ86~100の積分値が0.5となるようにして、xについて解けば乱数(=累積値)から分布(x)を求める関数を作ることができます。

一番簡単な「例2」の場合で考えると、
X = x-86とすれば、
X^2 + 7*X - 7*84*y = 0 ( 0<y<1 )
なので、これをxについて解いて、yを0~1の値をで発生させれよいという具合です。上例だと
 x = (sqrt(2352*y+49)-7)/2 + 86 ( =X + 86 ) となります。

ただし、この関数から得られた有限個のサンプルは、ご指定の条件に近いものではありますが、サンプル集団なのでピッタリの値にはなりません。
(平均値の期待値は100だが、実際のサンプル数が小さければ結果として100からずれる可能性が高いです。)

エクセルでやるにはA列に =Rand()
B列(B1)に、=(SQRT(2352*A1+49)-7)/2+86
として下にオートフィルすれば、例2の場合のサンプル分布が得られます。
実際にためしてみたところ、50個のサンプルだと平均値が98.4~100.5ぐらいになり、どうやらエクセルの乱数には0.5より小さい値が出る傾向が若干ながらあるみたいですね。

ちなみに、正規分布の乱数を発生する場合の例
http://www1.parkcity.ne.jp/yone/math/mathB03_06. …
http://homepage1.nifty.com/gfk/Norm-Rand.htm
「条件付きで、ランダムな数値を作成したい」の回答画像4
    • good
    • 0

乱数を使って平均が100になるようにするのは面倒なことですが、次のようにしてできるだけ100に近い、あるいは100になる値段を出すことができます。


A1セルに平均値と書きB1セルに100と入力します。
A2セルには個数と入力しB2セルには45と入力します。
A3セルには分布幅と入力しB3セルに88、C3セルに107と入力します。
A4セルには=$B$1-A5と式を入力します。
A5セルには=AVERAGE(A6:A100)と式を入力します。
A6セルには次の式を入力し下方に(A100セルまででもよい)オートフィルドラッグします。
=IF(ROW(A1)>$B$2,"",RANDBETWEEN($B$3,$C$3))
この式でRANDBETWEEN関数は88と107の数値の間で乱数を発生させるものです。
A4セルから(個数が45の場合にはA50セルまでを範囲として選択してよい)A100セルまでを範囲として選択して右横方向に例えばCJ列までオートフィルドラッグします。列を多くとることが以後の操作を少なくする上でよい。
D1セルには次の式を入力します。
=MIN(4:4)
E1セルには次の式を入力します。
=ADDRESS(4,MATCH(D1,4:4,0))
つまり6行より下の行で指定された分布幅での乱数を発生させ、その平均値を5行目に表示、指定の平均値からのずれを4行目に表示、D1セルにはそのずれが最も少ない値を表示、E1セルにはその最も少ない値のあるセル番地を表示させています。
この状態でキーボード上のF9ボタンを押します。押すたびに乱数が発生し、指定の平均値からのずれが変わります。ずれの値が0.1以下となればかなり平均値に近い値が乱数で得られたことになります。もちろんその値が0となれば望みの値ということになります。何回も繰り返すことで0になることもあります。一度試験してみてください。
    • good
    • 2

ソルバーが近い雰囲気だと思われます。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています