Игра с полной колодой (Microsoft Excel)
Как вам такой заголовок? Название относится к тому факту, что вам может потребоваться заполнить диапазон ячеек серией чисел в случайном порядке. Например, вы можете заполнить 52 ячейки числами от 1 до 52 в случайном порядке. (Это похоже на вытягивание карт из перетасованной колоды, отсюда и название подсказки.)
Очевидно, что нет встроенной функции Excel, обеспечивающей такую возможность, поэтому вам остается работать с макросами. К счастью, создать такой макрос не так уж и сложно. Следующий макрос отлично подойдет:
Sub FillRand() Dim nums() As Integer Dim maxval As Integer Dim nrows As Integer, ncols As Integer Dim j As Integer, k As Integer Dim Ptr As Integer Randomize Set s = Selection maxval = s.Cells.Count nrows = s.Rows.Count ncols = s.Columns.Count ReDim nums(maxval, 2) 'Fill the initial array For j = 1 To maxval nums(j, 1) = j nums(j, 2) = Int((Rnd * maxval) + 1) Next j 'Sort the array based on the random numbers For j = 1 To maxval - 1 Ptr = j For k = j + 1 To maxval If nums(Ptr, 2) > nums(k, 2) Then Ptr = k Next k If Ptr <> j Then k = nums(Ptr, 1) nums(Ptr, 1) = nums(j, 1) nums(j, 1) = k k = nums(Ptr, 2) nums(Ptr, 2) = nums(j, 2) nums(j, 2) = k End If Next j 'Fill in the cells Ptr = 0 For j = 1 To nrows For k = 1 To ncols Ptr = Ptr + 1 s.Cells(j, k) = nums(Ptr, 1) Next k Next j End Sub
Этот макрос использует двумерный массив (nums), чтобы определить, какие числа использовать и в каком порядке они должны использоваться. В начале макроса массив заполняется статическим числом (от 1 до количества ячеек) и случайным числом от 1 до количества ячеек. Это второе число затем используется для сортировки массива. После того, как массив сохранен, легко разместить исходные числа в ячейках.
Кстати, двумерный массив используется потому, что функция Rnd, которую VBA использует для генерации случайных чисел, может возвращать повторяющиеся значения. Таким образом, даже через второе измерение массива могут иметься дубликаты, когда массив окончательно отсортирован, первое измерение не будет иметь дубликатов.
Чтобы использовать макрос, начните с выбора ячеек, которые вы хотите заполнить последовательными значениями в случайном порядке. Когда вы запускаете макрос, этот диапазон заполняется. Например, если вы выберете десять ячеек и затем запустите макрос, эти ячейки будут заполнены числами от 1 до 10 в случайном порядке.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (2280) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:
link: / excelribbon-Playing_with_a_Full_Deck [Игра с полной колодой]
.