Excelでランダムにデータを割り当てる(ただし、重みづけをしたい)
ランダムにデータを発生させるには、RAND関数を使用すればよいのですが、一定の重みづけをしたいときもあります。
たとえば、アイキャッチ画像に使用しているような「くじ引き」の当選を割り当てるような場合、ランダムに均等に割り当てるのではなく、重みづけが必要です。
#実際のくじ引きは、比率ではなく当たりの本数があるのでランダムでは困るかもしれませんが、イメージです
#もともとは、サンプルデータを作ろうとして、ランダムにデータを割り当てるにはどうしたらいいかと考えたのがきっかけです。
データの部分
アイキャッチ画像の例でいうと、
A列は、発生比率を記入します。
この例では、A賞が1、B賞が3・・・という100本のくじの想定です。
私が使いたかったのは、サンプル売上データの担当者をわりあてるというものですが(営業成績の高い担当者、営業成績の低い担当者)、それも同じです。Aさんが10個売っている、Bさんが15個売っている、という感じになります。
B列は、計算用に変則的な部分があります。
というのも、最終的にVlookupのTRUEで引っ張ってくるのですが、これは、その値が「どこ以上」にあるかで探します。
たとえば、検索値が「0.12」であれば、上記の例でいうと「0.04以上」になるので、C賞です。検索値が「0.001」であれば、「0以上」になるのでA賞です。
ということで、B2セルには「0」を直打ちします。
B3セルには「=A2/SUM(A:A)+B2」が入っていまして、下のセルはそのコピーです。
解説すると、2行目は「A賞が0以上、A2セルの全体の割合未満」を算出するために「0」として、3行目は「B賞が、A2セルの全体の割合以上、A3セルの全体の割合未満」を算出する計算式を入れます。
「+B2」としているのは、4行目以降に必要です。
下記の絵でいうと「+B2」の部分がないと、ここの計算式はそれぞれの色の全体の割合を計算しているだけですが、「+B2」の部分を入れることによって、そこまでの合計にすることができるということですね。
重みのついたランダムデータを作る
ここまでのデータが準備できたら、あとはランダムデータを呼び出すだけです。
=VLOOKUP(RAND(),B:C,2,TRUE)
解説しますと、
検索値はRAND関数で発生させる0~1の間のデータです。
「=RAND()」で試してみると良いでしょう。
このランダムな数値をB列で見つけます。先ほど開設した通り、「TRUE」で「以上、未満」の検索をします。
合致したところの2列目の値を引っ張ってくるということですね。
今日もお疲れさまでした。