выбирать случайные имена из списка
Я пытаюсь использовать формулу, которая позволит мне выбрать 183 имена случайным образом из списка из 355 имен. Мой лист excel будет выглядеть примерно так:
Names Random.Names Paty Oscar John Anna Jane Carlos Maria Jennifer Susan Kayla
На моем фактическом листе у меня больше имен, но это всего лишь пример. Я использовал следующую формулу, но у меня есть несколько ячеек, которые показывают #REF после рандомизации.
=IF(ROWS($1:1)>$E$2,"",INDEX($A$8:$A$355,RANDBETWEEN(1,354)))
Пожалуйста, дайте мне знать, если у вас лучшая формула, или если вы знаете, что я делаю неправильно.
- Случайный номер Excel с заданным процентом
- Как генерировать случайные числа из разных интервалов, которые суммируются до фиксированной суммы в excel?
- Excel: как генерировать реальные случайные числа, имеющие как низкие, так и высокие 2 действительных числа?
- В Excel, как бы вы генерировали случайное число x раз
- Генерация случайных чисел в excel (с заданными параметрами и фиксированными ячейками)
- Сгенерировать N случайных чисел, сумма которых является константой K - Excel
- Генерация случайных значений -1 и +1 в Excel
- Как рандомизировать строки Excel
- генерировать случайные фазы между 0 и 2pi в excel
- Преобразование кода формулы excel в язык программирования
- Как читать значение ячейки случайным образом, используя случайную функцию из файла excel в Java?
- Ввод параметров в Python
- Excel: случайная групповая подготовка
Это потому, что INDEX относительный, поэтому строка 8 равна 1, а строка 355 равна 355-8 + 1 = 348. Измените значение RANDBETWEEN на 1,348
Все, что больше числа упомянутых ячеек, приведет к ошибке.
=IF(ROWS($1:1)>$E$2,"",INDEX($A$8:$A$355,RANDBETWEEN(1,348)))
Или вы можете ссылаться на весь столбец и использовать 8,355:
=IF(ROWS($1:1)>$E$2,"",INDEX($A:$A,RANDBETWEEN(8,355)))
У вас нет 355 имен между A8 и A355 только 355-8 + 1.
Поэтому исправьте RANDBETWEEN ()
Следуя логике моего предыдущего андерсера
Вам нужно только открыть редактор VBA, вставьте следующий код:
'By Julio Jesus Luna Moreno '[email protected] Option Base 1 Public Function UNIQRAND(a As Variant, b As Variant) As Variant Application.Volatile Dim k%, p As Double, flag As Boolean, x() As Variant k = 1 flag = False ReDim x(1) x(1) = Application.RandBetween(a, b) Do Until k = b - a + 1 Do While flag = False Randomize p = Application.RandBetween(a, b) 'Debug.Assert p = 2 resultado = Application.Match(p, x, False) If IsError(resultado) Then k = k + 1 ReDim Preserve x(k) x(k) = p flag = True Else flag = False End If Loop flag = False Loop UNIQRAND = x End Function
Эта функция сделает трюк
Public Function RANDNAMES(Rango As Range, HowMany As Integer) As Variant Dim n, p(), x(), i As Variant n = Rango.Rows.Count If n < HowMany Then MsgBox "Number of pairs must be less than number of total elements" Exit Function End If ReDim x(HowMany) ReDim p(n) p = UNIQRAND(1, n) For i = 1 To HowMany Step 1 x(i) = Application.Index(Rango, p(i)) Next i Debug.Print HowMany RANDNAMES = Application.Transpose(x) End Function