• 締切済み

任煮の数字で乱数表を作りたい・・・。

エクセルで、任意の数字を用いて乱数表を作りたいのですが、どうすればできますか? 例えば「2」「3」「5」「8」「10」「13「16」と言う風に数字を指定して、その数字のみによる乱数表を作成したいのです。 その際、或る一定の範囲内で、数字が重複しても構いませんし、時には連続して同じ数字が出現してもOKです。 例えば「3」「8」「10」「2」「2」「8」「5」「13」「5」「16」「16」「5」・・・というように出現しても構いません。 エクセルの表の範囲は「A7~IU200」とします。 PCの初心者ですので、次のように、順を追って丁寧に作業方法をご教示して頂くと助かります。 1.・・・・・・・・・ 2.・・・・・・・・・・・・・ 3.・・・・・・ 4.・・・・・・・ 5.・・・・・・・・・・ ・ ・ ・ 宜しくお願い致します。

みんなの回答

noname#35109
noname#35109
回答No.2

次のようにすればうまくできますよ。 A列に 「2」「3」「5」「8」「10」「13「16」と言う風に,"縦" に数字を用意し, B列には =INDIRECT("A" & INT(RAND()*COUNTA(A:A)+1)) という関数を B1 セルからずっとしたまで,コピペし続けます。 図示するとこんな感じです↓。 ///////////////////////////////////////////////////////  A列              B列   2   =INDIRECT("A" & INT(RAND()*COUNTA(A:A)+1))   3              〃(同上)   5              〃   8              〃   10              〃   13              〃   16              〃   …              … /////////////////////////////////////////////////////// これで行けると思います。 関数は内側から考えます。 というか考えるのは外側からでも内側からでもいいのですが, 動作は内側から動作します。 = ( 関数4( 関数3( 関数2 (関数1() ) ) ) ) このような感じで内側の関数1から順の動作します。 ですから理解するのも内側からの方が理解しやすいです。 =INDIRECT("A" & INT(RAND()*COUNTA(A:A)+1)) これを内側から1つずつ解説すると次のようになります。  =COUNTA(A:A) これ↑でA列のデータがある最終行が求められます。  =RAND()*COUNTA(A:A)+1 これ↑で (0以上1未満の乱数)×行数+1 が求められます。 例えば 7.02356… とか 1.2589… とかです。  =INT(RAND()*COUNTA(A:A)+1) これ↑で,その得られた乱数の小数点以下を切り捨てます。  =INDIRECT("A" & INT(RAND()*COUNTA(A:A)+1)) これ↑で,A列のその得られた整数乱数行目の値が返ります。 この =INDIRECT("A" & INT(RAND()*COUNTA(A:A)+1)) を B1 セルに書いて(コピペして), そのセルの右下のハンドルと呼ばれる小さな四角を, ダーーーーッ と下にドラッグすれば,コピペできます。 この ハンドル を 下に ダーーーーッ と下にドラッグ することをオートフィルと言います。 「オートフィルって?」 http://www.nct9.ne.jp/poporu/11.html 紛らわしい名前に「オートフィルタ」というものがありますが, 「オートフィル」と「オートフィルタ」は全く別物なので注意してください。 -☆- 余談 -☆-☆-☆-☆-☆-☆-☆- シート関数 と言えども立派なプログムです。 しかし,普通のプログラミングでは (VBAという意味ではなく一般的なプログラミングという意味),  変数a = COUNTA(A:A)    ' まず A の行数取得  変数b = RAND()* 変数a +1  ' 行数分の乱数(小数)取得  変数c = INT( 変数b )      ' 行数分の乱数(整数)取得  変数d = INDIRECT("A" & 変数c ) ' 乱数番目のデータを取得  メッセージボックス = 変数d  ' A列の乱数番目のデータを表示 このような感じに, 上の行から順次計算していく(考えて書く)のが普通です。 でも,シート関数では,これくらいなものは, 行(関数の場合セル)を分けずに1行(1セル)で書くことが多く, 全体を見通してからでないとコードが書きにくいので慣れていないと難しいですね。 普通のプログラミングだと, わかることから順次解明していけば回り道をしても, ふとした拍子にゴールにたどり着くことがありますが, エクセルのシート関数は,内側から内側から… ですから,先を見通さないとうまく行きません。 シート関数特有の慣れが必要です。

回答No.1

1.どんな関数があるのか調べる。 2.ヘルプから次の記述を発見する。  > a と b の範囲で乱数を発生させるには、次の数式を使います。  > RAND()*(b-a)+a 3.この関数の使い方をいろいろ試してマスターしてください。 お書きになってることは 1~7までの乱数を発生させて・・・。こんな感じに変換テーブル作っておいて置き換えればよろしいかと。  1 → 2  2 → 3  3 → 5  4 → 8  5 → 10  6 → 13  7 → 16