• ベストアンサー

選択した数字からランダムに数字を発生させるにはどうしたらよいでしょうか

途中までいろいろ調べていたのですが、行き詰まってしまいました・・。 エクセルを使って行いたいのですが、 たとえば、1~30までの数字があって、その中で10個選択して、 その選択した数字の中から、3個ランダムに数字を発生させたいのですが、どのような式やマクロを組んだらよいでしょうか? 「表示 - ツールバー - フォーム」のチェックボックスで選択をするようにしたいです。 わかりにくい質問でスイマセンが、ご回答よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

チェックボックスが1~30まであって、A1:A30にリンクしているとし ますね。で、B列に=rand()*A列と書くと、チェックの入った番号の 行だけ乱数が発生し、チェックのないところは0になります。 C1: =rank(B1, $B$1:$B$30) で乱数の大きい順に順位が付くので、適当なところに G1: =match(1, $C$1:C$C30) のように好きな順位を取った行番号を抽出してやればオッケー。

popila
質問者

お礼

回答が遅くなってスイマセン。 言われたとおりに入力すると、ほぼイメージしたもの通りのものが出来ました。ありがとうございました。

その他の回答 (2)

回答No.3

あーごめん、質問文読み間違えてた。 でも,要は頭の使いようで、 RANDBETWEENで1~3までの数字をさらに、生成して組み合わせてあげればいいよね?

popila
質問者

お礼

お礼が遅くなってスイマセン。 RANDBETWEEN関数についてはもう少し勉強してみます。 ありがとうございました。

回答No.1

Rand関数やRandBetween関数でもできそうではある。 http://xl-kobeya.seesaa.net/article/17925651.html しかし http://aoki2.si.gunma-u.ac.jp/Hanasi/excel/ >Excel 2003 の rand 関数には致命的なバグがあります。0 ~ 1 の一様乱数を返すはずですが,なんと 10 % の確率で負の値を返すそうです。発生させる乱数の範囲を指定できる randbetween 関数とて rand 関数を下請けにしているのだろうから同じ問題が起きているとのことです。R を使いましょう。 なんて話も。 マクロの場合は以下のようにします(Randomize Timerの位置に地震がありません) Sub オプション3_Click() Randomize Timer Dim i For i = 1 To 10 Cells(1, i).Value = Int(Rnd() * 10) + 1 'A1からJ1まで最小1,最大10の数字を並べる Next i End Sub

popila
質問者

お礼

早速の回答ありがとうございます。 Rand関数やRandBetween関数だと、選択した数字からではなく、1~10の中から選んできそうです。 マクロについては、知識不足でよくわかりませんが、試してみます。 ありがとうございました。

関連するQ&A