プロが教えるわが家の防犯対策術!

例えば、人間が4人いて、鉛筆が30個ある場合で、
4人全員に鉛筆30本すべてを何本かずつ
(ランダムに)分配させる値を戻す関数は何でしょうか。

A 回答 (6件)

難しいことではありません。


乱数を使えばよいです。

私はエクセルを持っていませんが、
たしかRND()だかRAND()だか、そんな名称です。
0~1の範囲での乱数を発生することができます。
この乱数に30を掛け算すれば1~30の乱数ができたことになります。

そうして、30個のセルにそれぞれ1~30個の乱数を発生させます。
各々が鉛筆1本1本だと思ってください。

それの整数部分(小数点以下切捨て)が、人の名前だと思ってください。

0~0.999・・・ならば、1番目の人
1~1.999;・・ならば、2番目の人
・・・

なお、整数部分をあらわす関数名は、たしか、
INT(セル名)だったと思います。

この回答への補足

ご回答ありがとうございます。
RAND()関数の利用ですね。

どうも私がやろうとしていることは、合計値がわかっている時に、合計値を分配の各対象に適当な数値で振り分けたいというSUM関数の全く逆のことのようです。

SUM関数の逆バージョンの関数ってないでしょうか。

補足日時:2004/01/22 16:43
    • good
    • 0

こんにちは。

maruru01です。

このような分配問題は、ランダム性を考えると、結構難問です。
端数処理があるので、厳密にランダムにするのは無理です。
とりあえず、端数を一番多い人で調整する方法が、一番ランダム性を損ないにくいので、その方法です。
まず、A1に、

=RAND()

と入力して、A4までコピーします。
次に、B1に、

=A1/SUM($A$1:$A$4)*30

と入力して、B4までコピーします。
そうしたら、C1に、

=IF(MAX($B$1:$B$4)=B1,30-SUMPRODUCT(ROUND($B$1:$B$4,)),)+ROUND(B1,)

と入力して、C4までコピーします。
このC1:C4が、分配された数になります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考にさせていただきます。

お礼日時:2004/01/30 18:02

#1です。



>どうも私がやろうとしていることは、合計値がわかっている時に、合計値を分配の各対象に適当な数値で振り分けたいというSUM関数の全く逆のことのようです。

ははー。
確率論とか統計学の話になってきましたね。

要は、4つの箱のどれかにそれぞれ4分の1の確率でランダムにボールを入れるととして、合計N個ボールを入れた場合にどうなるかですね。

・・・どうやればいいか、思いつかないです。



とりあえず、#1の誤記訂正をしておきましょう。
2箇所の「1~30」は、いずれも「0~30」(厳密には0~29.99999・・・)の誤りです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考にさせていただきます。

お礼日時:2004/01/30 18:02

1本目を誰に、2本目を誰に・・・30本目を誰に、


と分配すると思いますが、
分配数の多い少ないは構わない、として、
関数で考えてみたけど、難しいですね。

VBAではダメでしょうか?
以下を貼り付けて、どこかのセルをクリックして見て下さい。
面白い現象になります。


Option Explicit
Dim I As Integer
Dim J As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Worksheets("sheet1").Range("A1:D30") = ""
 For I = 1 To 30
   J = Int((4 * Rnd) + 1)
   Worksheets("sheet1").Cells(I, J) = I
 Next I
End Sub
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
参考にさせていただきます。

お礼日時:2004/01/30 18:02

x+y+z+u=30と言う不定方程式の整数解(の数ではなく)の解(整数の4組み)そのものを求めているのでしょうか。


例えばx=2、y=3、z=5,u=20など.
エクセルの関数は最終結果として、「1つの」「値」しか
返しません。値には数値と文字列を返すものがあります。
ですから根本から、当てが違っていると思います。組み合わせの問題はエクセルは苦手と思います。
配列数式等もありますが、複数の値は返してないと思います。
ただ自信はないが、メニューのツール-「ソルバー」というツールが、制約条件を整数に設定できるらしいので、使えるかも知れません。本件に使えるか研究されては。
が、しかし小生は数論・確率は素人に近いので、数学関連のカテゴリに質問されることをお勧めします。過去のコンピュターカテゴリでの、数学がらみの問題の回答は少ないと個人的に感じています。
プログラマは文系専攻人間が多いのでは。
理論に裏付けされた回答でないと、質問者が判別眼がないと惑わされます。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
参考にさせていただきます。

お礼日時:2004/01/30 18:01

1本鉛筆を配るごとに、くじ引きをするような考え方でやってみました。


数学的なことは自信無しです。

A1に、

=INT(RAND()*4+1)

を入れて、A30までオートフィル。

C1に、

=COUNTIF($A$1:$A$30,ROW())

を入れて、C4までオートフィル。

C列を合計すると30になります。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
参考にさせていただきます。

お礼日時:2004/01/30 18:01

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