如何随机化Excel行

时间:2012-07-13 20:01:06

标签: excel random

如何在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()创建一个新列并使用随机数填充它,并根据该列进行排序。

但这是最好的方法吗?兰德公式将提供最多a million random numbers,我有25万行,所以看起来它会起作用。

谢谢

我搜索了一下,当this answer about randomizing columns接近时,它似乎有点矫枉过正。

4 个答案:

答案 0 :(得分:56)

也许整个列中充满了随机数并不是最好的方法,但似乎最像@mariusnn提到的那样实用。

就此而言,这让我在Office 2010中踩了一段时间,虽然通常像the one in lifehacker这样的答案,但我只是想分享一个额外的步骤,使数字变得独一无二:

  1. 在您要随机化的列表旁边创建一个新列
  2. 在新列的第一个单元格中键入=rand() - 这将生成0到1之间的随机数
  3. 使用该公式填充列。最简单的方法可能是:

    • 沿新列向下,直到您想要随机化的最后一个单元格
    • 按住Shift并单击最后一个单元格
    • 按Ctrl + D
  4. 现在你应该有一列相同的数字,即使它们都是随机生成的。

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

    这里的诀窍是重新计算它们!转到公式标签,然后点击立即计算(或按F9)。

    Actually random numbers!

    现在,该列中的所有数字实际上都是随机生成的。

  5. 转到主页标签,然后点击排序&过滤。选择您想要的任何订单(最小到最大最大到最小) - 无论哪个订单都会为您提供与原始订单相关的随机订单。然后在排序警告提示您展开选择时单击确定。

  6. 您的列表现在应该是随机的!如果需要,你可以删除随机数列。

答案 1 :(得分:8)

我通常按照你的描述做: 添加一个具有随机值(=RAND())的单独列,然后对该列执行排序。

可能是更复杂和更漂亮的方式(使用宏等),但这对我来说足够快和简单。

答案 2 :(得分:1)

这是一个允许您在列中随机播放选定单元格的宏:

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. 右键点击&#34; ThisWorkbook&#34;在您当前打开的电子表格下(在&#34之后的括号中列出; VBAProject&#34;)并选择Insert / Module。
  3. 粘贴上面的代码并保存电子表格。
  4. 现在你可以分配&#34; ShuffleSelectedCells&#34;宏到图标或热键可以快速随机化所选行(请记住,您只能选择一行行。)

答案 3 :(得分:0)

使用 Excel Online (Google Sheets)。并为 Google Sheets 安装 Power Tools。然后在 Google Sheets 中转到 Addons 选项卡并启动 Power Tools。然后从 Power Tools 菜单中选择 Randomize。选择Shuffle。然后在 Excel 表中选择您的测试选项。然后选择 Cells in each row 并从 Power Tools 菜单中单击 Shuffle。这将彼此独立地随机打乱每一行的选定单元格。