Как рандомизировать строки 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() и отсортировать по этому столбцу.
Но это лучший способ сделать это? Уравнение RAND будет обеспечивать миллион случайных чисел, и у меня есть четверть миллиона строк, поэтому похоже, что это сработает.
Спасибо
Я искал немного, и в то время как этот ответ о рандомизации столбцов близок, кажется, что это слишком сложно.
Ответы
Ответ 1
Возможно, весь столбец, заполненный случайными числами, не самый лучший способ сделать это, но он кажется, вероятно, наиболее практичным, как упомянуто @mariusnn.
В этой заметке это немного сработало с Office 2010, и хотя в целом ответы вроде того, что работает в lifehacker, я просто хотел для совместного использования дополнительного шага, необходимого для уникальности чисел:
- Создайте новый столбец рядом со списком, который вы собираетесь рандомизировать.
- Введите
=rand()
в первую ячейку нового столбца - это создаст случайное число от 0 до 1
-
Заполните столбец этой формулой. Самый простой способ сделать это можно:
- спуститесь по новому столбцу до последней ячейки, которую вы хотите рандомизировать.
- удерживайте нажатой клавишу Shift и нажмите на последнюю ячейку
- нажмите Ctrl + D
-
Теперь у вас должен быть столбец с одинаковыми номерами, хотя они все генерируются случайным образом.
![Random numbers... that are the same...]()
Хитрость здесь состоит в том, чтобы пересчитать их! Перейдите на вкладку "Формулы" и нажмите "Рассчитать сейчас" (или нажмите "F9" ).
![Actually random numbers!]()
Теперь все числа в столбце будут генерироваться случайным образом.
-
Перейдите на вкладку "Главная" и нажмите "Сортировка и фильтр". Выберите нужный вам порядок (от самого маленького до самого большого или от максимального к наименьшему) - в зависимости от того, какой из них даст вам случайный порядок в отношении первоначального заказа. Затем нажмите "ОК", когда "Предупреждение о сортировке" предложит вам развернуть выделение.
-
Ваш список должен быть рандомизирован прямо сейчас! Вы можете избавиться от столбца случайных чисел, если хотите.
Ответ 2
Я обычно делаю, как вы описываете:
Добавьте отдельный столбец со случайным значением (=RAND()
), а затем выполните сортировку в этом столбце.
Возможно, это будет более сложный и более удобный способ (с использованием макросов и т.д.), но это достаточно быстро и достаточно просто для меня.
Ответ 3
Здесь макрос, который позволяет перетасовывать выбранные ячейки в столбце:
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
Вы можете прочитать комментарии, чтобы узнать, что делает макрос. Здесь, как установить макрос:
- Откройте редактор VBA (Alt + F11).
- Щелкните правой кнопкой мыши на "ThisWorkbook" под текущей открытой таблицей (в скобках после "VBAProject" ) и выберите "Вставить/Модуль".
- Вставьте код выше и сохраните таблицу.
Теперь вы можете назначить макросу "ShuffleSelectedCells" значку или горячую клавишу для быстрого рандомизации выбранных строк (помните, что вы можете выбрать только один столбец строк).