- 締切済み
任煮の数字で乱数表を作りたい・・・。
エクセルで、任意の数字を用いて乱数表を作りたいのですが、どうすればできますか? 例えば「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.・・・・・・・・・・ ・ ・ ・ 宜しくお願い致します。
- みんなの回答 (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セル)で書くことが多く, 全体を見通してからでないとコードが書きにくいので慣れていないと難しいですね。 普通のプログラミングだと, わかることから順次解明していけば回り道をしても, ふとした拍子にゴールにたどり着くことがありますが, エクセルのシート関数は,内側から内側から… ですから,先を見通さないとうまく行きません。 シート関数特有の慣れが必要です。
- ryuujiok2205
- ベストアンサー率21% (233/1098)
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