- ベストアンサー
Excelで乱数を使って並べ替え?
Excel2000使ってます。 宝くじ(ロト6)当選予想ソフトを作ろうと思っています。 * 6×6の表に抽出した36の数字を入力し各行・列ごとに乱数を使って並べ替える方法。又は36文字全てを並べ替える方法がわかりません。 どなたか教えて下さい。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
VBAを使います。 元になる数字がA1:F6に書いてあり、結果をA8:F13に作るとします。 Sub RandomSwap() 'A8:F13の範囲にコピー Range("A1:F6").Copy Cells(8, 1) '乱数系列初期化 Randomize Dim row1 As Long, col1 As Long, row2 As Long, col2 As Long Dim i As Long, j As Long 'コピー先の6×6の範囲をランダムに1000回スワップ For i = 1 To 1000 '対象セルをランダムに決定 row1 = Int((6 * Rnd) + 8) col1 = Int((6 * Rnd) + 1) row2 = Int((6 * Rnd) + 8) col2 = Int((6 * Rnd) + 1) 'スワップ j = Cells(row1, col1) Cells(row1, col1) = Cells(row2, col2) Cells(row2, col2) = j Next End Sub
その他の回答 (4)
- mshr1962
- ベストアンサー率39% (7417/18945)
#4のmshr1962です。すみません式を間違えました。 C1=MATCH(SMALL($A$1:$A$43,COLUMN()+(ROW()-1)*6-2),$A$1:$A$43,0) が正解です。
お礼
ありがとうございました。 実は、RANDを使った表は作っていましたが、なんとなくしっくりしていませんでした。今回の表は、自分で作った表と入れ替えて使わせていただきます。
- mshr1962
- ベストアンサー率39% (7417/18945)
ロト6だと1~43の数字の組み合わせ(順不同)ですよね。 すべての数値から同じ数値を使わない6種のデータを作るなら A1:A43に =RAND() として乱数を発生させる。 C1:H6に表を作るとして C1=MATCH(SMALL($A$1:$A$43,COLUMN()+ROW()-3),$A$1:$A$43,0) でH6までコピーする。
- imogasi
- ベストアンサー率27% (4737/17069)
「宝くじ(ロト6)当選予想」が良くわかりませんのですが、それで満たすべき条件で大きな誤解をしてる部分があるかも しれませんが、その際はご容赦を。 下記はどうですか。 A1A36に1-36の連続数字を入れる。これが不適なら、人間が手作業で適当な36個の重複しない(必要か?)をA1:A36のセルに入れる。 B列にRAND関数で数字を発生させる。 B列でソートする。 A列 B列 21 13591 17 19430 33 19726 1 11753 7 15409 5 12444 8 19134 3 12341 10 15765 19 19386 29 19584 32 12521 12 15286 11 14696 6 18247 16 14787 ・・・以下略(もちろん質問者がやっても、B列は違う荒いとなる。 したがって下記の表D1:I6も違うものになる) B列の式は=INT(RAND()*10000+9999) など。 D1:i6にA列から数字を持ってくる。 21 17 33 1 7 5 8 3 10 19 29 32 12 11 6 16 13 14 27 35 2 30 23 25 26 36 34 18 28 15 20 31 9 22 4 24 D1の式は =INDIRECT("a"&INT((ROW()-1))*6+MOD((COLUMN()-4),6)+1) これをI1まで式を複写。D1:I1をD6:I6まで式を複写。 乱数は同じ数の発生を排除しない(=発生することがある) それで欄数値で並べ替えに持ち込むのが賢明と思う。同じ値でも 順序はどうにか決まるから。
お礼
ありがとうございました。 関数の内容がよく分からないので勉強させていただきます。 今考えているものとは少し違うようでしたがとても参考になりました。
- 134
- ベストアンサー率27% (162/600)
乱数発生のために、B2セルに =int(rand()*35+1) と入力 A2セルに =if(countif($B$2:b2,b2)>1,"",max($a$1:a1)+1) と入力 A2とB2の関数をおおむね300行くらいコピー 6×6 の行に 1~36までの数字を入力 (例えば、F20~K25) そして、目的とする乱数が入る6×6マスを 例えば、F3~K9として、 F3セルに =vlookup(f20,$a$2:$b$301,2,0) と入力して、K9セルまでの6×6マスに関数をコピーする なんていう方法も可能かな なんて 思いました。
お礼
ありがとうございました。 今回は説明が悪く、申し訳ありません。(1から43の数字から36個を選び6×6のマスに入れ乱数で並べ替えたかったのです) とはいえ、この表もとても面白く参考にさせていただきました。
お礼
ありがとうございました。 VBAは今やってみようと本を開いたばかりでした。 知らないことでも、やりたいことなら真剣に取り組むとなんとなく解るものですね。VBAを実行した時は感動してしまいました。 VBAって面白いものですね。