- 締切済み
ブロックでランダムに並べ替えたい
あかさたなはま いきしちにひみ うくすつぬふむ えけせてねへめ おこそとのほも これをエクセルでランダムに並び替えたいのですが、rand()を使用して並べ替えを行っても行のみ、列のみしかランダムに並べ替える事が出来ませんでした これに外枠を付けたとして、中身をもっとごちゃ混ぜにしたいのですが、出来るでしょうか? エクセルにはあまり詳しくありません よろしくお願いいたします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
マクロが出来ないので、関数法をば…(如何にも力づくという感じ?) 1.例えば、セル J1 から下方に(セル J35 まで)次のデータを入力 あ、い、う、え、お、…、ま、み、む、め、も 2.セル I1 に次式を入力して、此れを下方に(セル I35 まで)ズズーッと 複写 =CEILING(ROW(1:1)/5,1)*10+IF(MOD(ROW(1:1),5),MOD(ROW(1:1),5),5) 3.範囲 I1:J35 に名前 list を付ける 4.セル K1 に式 =RAND() を入力して、此れを下方にズズーッと複写 5.セル A1 に次式を入力して、此れを範囲 A1:G5 に複写 =VLOOKUP(COLUMN(A:A)*10+ROW(1:1),list,2) 6.範囲 J1:K35 を選択すると、通常はセル J1 がアクティブだが、Tabキー を叩いて列Kのセルをアクティブにしておく 此処で、[ツールバー]上の[昇順(または降順)で並べ替え]アイコンをマウスでツンツンしてみてください。
- keirika
- ベストアンサー率42% (279/658)
「あ」がA1と仮定した場合、表はA1:F5の範囲になります。以下の手順で3つの表を作成し、4つ目が完成になります。 (1)H1に=RAND()を入力し、M5までコピーすると異なる数値が30個出来ます。 (2)H8に=RANK(H1,$H$1:$M$5)を入力し、M12までコピーすると1から30までの異なる数字が出来ます。 (3) H14からJ43に以下の表を作成します 1列目は1から30までの数字 2列目は0を6個、1を6個、2を6個、3を6個、4を6個 3列目は0から5までの数字を5回繰り返し ちなみに・・は間の省略です 1 0 0 2 0 1 3 0 2 4 0 3 5 0 4 6 0 5 7 1 0 8 1 1 ・ ・ ・ ・ ・ ・ 30 4 5 (4)3つの表が出来ましたらA8に =OFFSET($A$1,VLOOKUP(H8,$H$14:$J$43,2,0),VLOOKUP(H8,$H$14:$J$43,3,0))の式を入力し、F12までコピーしてください これが4つ目の表になりますのでキーボードのF9を押すごとにランダムに変化します。 長くなりましたが、もしよろしければ一度試してみてください
お礼
一番最初の方の回答で出来てしまいましたが、今回回答いただいたものについてはすべて後で試すつもりです ありがとうございました
補足
まだ試していませんが、先着順で10ポイントをつけさせてください
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 関数でやる方法もありますが、マクロで行ったほうが早いかもしれません。 シートタブを右クリックして、[コードの表示]で開いたら、以下のコードを貼り付け、 Alt + Q で画面を閉じます。 後は、Alt + F8 で、[シート名!RandomAsortment] を探して実行します。マクロ-マクロ-編集で、ショートカットにしてもよいかもしれません。 なお、関数で行うよりも、マクロのランダムの組み合せのほうが高いです。 '---------------------------------- Sub RandomAsortment() Dim r As Range Dim c As Range Dim Data() As Variant Dim i As Long Dim j As Long Set r = Range("A1").CurrentRegion ReDim Data(1, 1 To r.Count) Randomize Application.ScreenUpdating = False For Each c In r i = i + 1 Data(0, i) = c.Value Data(1, i) = Rnd() Next c Babble_Sort Data() For Each c In r j = j + 1 c.Value = Data(0, j) Next c Set r = Nothing Application.ScreenUpdating = True End Sub Private Sub Babble_Sort(ar()) Dim u As Long Dim i As Long Dim j As Long Dim t1 As Variant Dim t2 As Variant u = UBound(ar, 2) i = LBound(ar, 2) Do While i < u j = u Do While j > i If ar(1, j) < ar(1, i) Then t1 = ar(0, j) t2 = ar(1, j) ar(0, j) = ar(0, i) ar(1, j) = ar(1, i) ar(0, i) = t1 ar(1, i) = t2 End If j = j - 1 Loop i = i + 1 Loop End Sub '----------------------------------
お礼
回答ありがとうございます 書いてある通りに行いましたがランダムになりませんでした バージョンが違うのか、又は設定がどこか違うのでしょうか エクセル2003です
補足
すいません なりました!! ばっちりです ありがとうございました!!!
お礼
一番最初の方の回答で出来てしまいましたが、今回回答いただいたものについてはすべて後で試すつもりです ありがとうございました