web-dev-qa-db-ja.com

Excelの行をランダム化する方法

Excelで多くの行をランダム化するにはどうすればよいですか?

For example I have an Excel sheet with data in 3 rows. 
1 A dataA
2 B dataB
3 C dataC

I want to randomize the row order. For example
2 B dataB
1 A dataA
3 C dataC

新しい列を作成し、= Rand()を使用して乱数を入力し、その列に基づいて並べ替えることができます。

しかし、これが最善の方法ですか?ランドの方程式は最大 100万個の乱数 を提供し、私は25万行を持っているので、うまくいくようです。

ありがとう

私は少し検索しましたが、 列のランダム化に関するこの答え が近い間は、やり過ぎのようです。

43
Joshua Dance

おそらく、乱数でいっぱいの列全体がそれを行うのに最適な方法ではありませんが、@ mariusnnが述べたように、おそらく最も実用的であるように思われます。

そのことについて、これはOffice 2010でしばらく私を踏みにじりました、そして一般的に lifehackerの1つ workのような答えですが、数字が一意になるために必要な追加のステップを共有したいだけです:

  1. ランダム化するリストの横に新しい列を作成します
  2. 新しい列の最初のセルに=Rand()と入力します-これにより、0から1の間の乱数が生成されます
  3. 列にその数式を入力します。これを行う最も簡単な方法は次のとおりです。

    • ランダム化する最後のセルまで、新しい列に沿って下に移動します
    • shiftキーを押しながら最後のセルをクリックします
    • ctrl + Dを押す
  4. これで、すべてがランダムに生成されていても、同じ番号の列ができました。

    Random numbers... that are the same...

    ここでのコツは、それらを再計算することです! Formulasタブに移動し、Calculate Nowをクリックします(または押すF9)。

    Actually random numbers!

    これで、列のすべての数値が実際にランダムに生成されます。

  5. ホームタブに移動し、並べ替えとフィルターをクリックします。希望する順序を選択します(Smallest to LargestまたはLargest to Smallest) -元の順序に対してランダムな順序を与えるもの。次に、並べ替え警告選択を展開するのプロンプトを表示したら、OKをクリックします。

  6. あなたのリストは今ランダム化されるべきです!必要に応じて、乱数の列を取り除くことができます。

56
arturomp

私は通常あなたが説明するようにします:
ランダムな値(=Rand())で別の列を追加し、その列でソートを実行します。

(マクロなどを使用して)より複雑できれいな方法かもしれませんが、これは私にとって十分に高速で簡単です。

8
mariusnn

列内の選択したセルをシャッフルできるマクロを次に示します。

Option Explicit

Sub ShuffleSelectedCells()
  'Do nothing if selecting only one cell
  If Selection.Cells.Count = 1 Then Exit Sub
  'Save selected cells to array
  Dim CellData() As Variant
  CellData = Selection.Value
  'Shuffle the array
  ShuffleArrayInPlace CellData
  'Output array to spreadsheet
  Selection.Value = CellData
End Sub

Sub ShuffleArrayInPlace(InArray() As Variant)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShuffleArrayInPlace
' This shuffles InArray to random order, randomized in place.
' Source: http://www.cpearson.com/Excel/ShuffleArray.aspx
' Modified by Tom Doan to work with Selection.Value two-dimensional arrays.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  Dim J As Long, _
    N As Long, _
    Temp As Variant
  'Randomize
  For N = LBound(InArray) To UBound(InArray)
    J = CLng(((UBound(InArray) - N) * Rnd) + N)
    If J <> N Then
      Temp = InArray(N, 1)
      InArray(N, 1) = InArray(J, 1)
      InArray(J, 1) = Temp
    End If
  Next N
End Sub

コメントを読んで、マクロの動作を確認できます。マクロをインストールする方法は次のとおりです。

  1. VBAエディター(Alt + F11)を開きます。
  2. 現在開いているスプレッドシート(​​「VBAProject」の後の括弧内にリストされている)の下にある「ThisWorkbook」を右クリックし、「挿入/モジュール」を選択します。
  3. 上記のコードを貼り付けて、スプレッドシートを保存します。

これで、「ShuffleSelectedCells」マクロをアイコンまたはホットキーに割り当てて、選択した行をすばやくランダム化できます(行の1列しか選択できないことに注意してください)。

1
thdoan