Gary tiene dos listas en una hoja de trabajo. Uno de ellos, en la columna A, contiene una lista de excedentes de nuestra empresa y el otro, en la columna G, contiene una lista de nombres. No hay nada en las columnas B: F. A Gary le gustaría asignar nombres, al azar, a la lista de elementos. Cada nombre de la columna G debe asignarse solo una vez. Si hay más nombres que elementos, algunos nombres no se usarán. Si hay menos nombres que elementos, algunos elementos no tendrán nombres asociados.

Hay un par de formas de hacerlo. Quizás lo más fácil, sin embargo, es simplemente asignar un número aleatorio a cada elemento en la columna A.

Suponiendo que el primer elemento está en la celda A1, ponga lo siguiente en la celda B1:

=RAND()

Haga doble clic en el controlador de relleno en la celda B1, y debería terminar con un número aleatorio (entre 0 y 1) a la derecha de cada elemento en la columna A.

Ahora, seleccione todas las celdas en la columna B y presione Ctrl + C para copiarlas al Portapapeles. Utilice Pegado especial para pegar valores de nuevo en las celdas de la columna B. (Esto convierte las celdas de fórmulas en valores estáticos reales).

Ordene las columnas A y B en orden ascendente según los valores de la columna B.

Si observa las filas, ahora tendrá elementos (columna A) asociados aleatoriamente con un nombre (columna G).

Aunque no es necesario, también puede seguir estos mismos pasos para agregar un número aleatorio a la derecha de cada nombre y luego ordenar los nombres. (Digo que no es necesario porque aleatorizar los elementos debería ser suficiente para asegurar que haya elementos aleatorios asociados con cada nombre).

La técnica discutida hasta ahora funciona muy bien si tiene que hacer el emparejamiento aleatorio solo de vez en cuando. Si necesita hacerlo con bastante frecuencia, entonces una macro puede ser un mejor enfoque. Por supuesto, existen muchos enfoques diferentes basados ​​en macros que puede utilizar. El siguiente enfoque supone que la lista de elementos está en la columna A y la lista de nombres en la columna G. También supone que hay celdas de encabezado en la fila 1 para cada columna.

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

Si hay más nombres que elementos, la macro asigna nombres a los elementos de forma aleatoria. Si hay más elementos que nombres, asigna aleatoriamente algunos elementos a nombres y deja aleatoriamente «huecos» (elementos sin nombres). Los almacena en la columna B, sobrescribiendo lo que estaba allí.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (5682) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.