Подтвердить что ты не робот

Как рандомизировать строки 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 будет обеспечивать миллион случайных чисел, и у меня есть четверть миллиона строк, поэтому похоже, что это сработает.

Спасибо

Я искал немного, и в то время как этот ответ о рандомизации столбцов близок, кажется, что это слишком сложно.

4b9b3361

Ответ 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" значку или горячую клавишу для быстрого рандомизации выбранных строк (помните, что вы можете выбрать только один столбец строк).