У Гэри есть два списка на листе. Один из них, в столбце A, содержит список излишков в нашей компании, а другой, в столбце G, содержит список имен. В столбцах B: F ничего нет. Гэри хотел бы случайным образом присвоить имена списку предметов. Каждое имя из столбца G должно быть присвоено только один раз. Если имен больше, чем предметов, то некоторые имена не будут использоваться. Если имен меньше, чем элементов, то некоторые элементы не будут иметь связанных имен.

Есть несколько способов сделать это. Однако, возможно, самый простой — просто присвоить случайное число каждому элементу в столбце A.

Предполагая, что первый элемент находится в ячейке A1, поместите в ячейку B1 следующее:

=RAND()

Дважды щелкните маркер заполнения в ячейке B1, и вы должны получить случайное число (от 0 до 1) справа от каждого элемента в столбце A.

Теперь выберите все ячейки в столбце B и нажмите Ctrl + C, чтобы скопировать их в буфер обмена. Используйте Специальную вставку, чтобы вставить значения обратно в эти ячейки в столбце B. (Это преобразует ячейки из формул в фактические статические значения.)

Отсортируйте столбцы A и B в порядке возрастания на основе значений в столбце B.

Если вы посмотрите на строки, то теперь у вас будут элементы (столбец A), случайным образом связанные с именем (столбец G).

Хотя в этом нет необходимости, вы также можете выполнить те же действия, чтобы добавить случайное число справа от каждого имени и затем отсортировать имена. (Я говорю, что в этом нет необходимости, потому что рандомизации элементов должно быть достаточно, чтобы гарантировать, что с каждым именем связаны случайные элементы.)

Обсуждаемая до сих пор техника отлично работает, если вам нужно делать случайное соединение только время от времени. Если вам нужно делать это довольно часто, лучше использовать макрос. Конечно, есть много разных подходов на основе макросов, которые вы можете использовать. Следующий подход предполагает, что список элементов находится в столбце A, а список имен — в столбце G. Он также предполагает, что в строке 1 для каждого столбца есть ячейки заголовка.

Sub AssignNames()

Set srItems = Range("A2").CurrentRegion     Set srNames = Range("G2").CurrentRegion     NameCount = srItems.Rows.Count - 1     ItemCount = srNames.Rows.Count - 1

'Randomize Names     ReDim tempArray(NameCount, 2)

For x = 0 To NameCount - 1         tempArray(x, 0) = Range("G2").Offset(x, 0)

tempArray(x, 1) = Rnd()

Next x

'Bubble Sort     For i = 0 To NameCount - 2         For j = i To NameCount - 1             If tempArray(i, 1) > tempArray(j, 1) Then                 tempItem = tempArray(j, 0)

tempName = tempArray(j, 1)

tempArray(j, 0) = tempArray(i, 0)

tempArray(j, 1) = tempArray(i, 1)

tempArray(i, 0) = tempItem                 tempArray(i, 1) = tempName             End If         Next j     Next i

'AssignNames     Range("B2") = "Assigned"

AssignCount = NameCount     If NameCount > ItemCount Then AssignCount = ItemCount         For x = 0 To AssignCount         Range("B2").Offset(x, 0) = tempArray(x, 0)

Next x End Sub

Если имен больше, чем элементов, макрос назначает имена элементам случайным образом. Если элементов больше, чем имен, он случайным образом присваивает некоторым элементам имена и случайным образом оставляет «дыры» (элементы без имен). Он хранит их в столбце B, перезаписывая все, что там было.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (5682) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.