• 締切済み

ブロックでランダムに並べ替えたい

あかさたなはま いきしちにひみ うくすつぬふむ えけせてねへめ おこそとのほも これをエクセルでランダムに並び替えたいのですが、rand()を使用して並べ替えを行っても行のみ、列のみしかランダムに並べ替える事が出来ませんでした これに外枠を付けたとして、中身をもっとごちゃ混ぜにしたいのですが、出来るでしょうか? エクセルにはあまり詳しくありません よろしくお願いいたします

みんなの回答

noname#204879
noname#204879
回答No.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のセルをアクティブにしておく 此処で、[ツールバー]上の[昇順(または降順)で並べ替え]アイコンをマウスでツンツンしてみてください。

80niti
質問者

お礼

一番最初の方の回答で出来てしまいましたが、今回回答いただいたものについてはすべて後で試すつもりです ありがとうございました

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

「あ」が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を押すごとにランダムに変化します。 長くなりましたが、もしよろしければ一度試してみてください

80niti
質問者

お礼

一番最初の方の回答で出来てしまいましたが、今回回答いただいたものについてはすべて後で試すつもりです ありがとうございました

80niti
質問者

補足

まだ試していませんが、先着順で10ポイントをつけさせてください

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 関数でやる方法もありますが、マクロで行ったほうが早いかもしれません。 シートタブを右クリックして、[コードの表示]で開いたら、以下のコードを貼り付け、 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 '----------------------------------

80niti
質問者

お礼

回答ありがとうございます 書いてある通りに行いましたがランダムになりませんでした バージョンが違うのか、又は設定がどこか違うのでしょうか エクセル2003です

80niti
質問者

補足

すいません なりました!!  ばっちりです  ありがとうございました!!!

関連するQ&A