Ejercicio resuelto – Generar nombres aleatorios

A partir del enunciado del Ejercicio: Generar Nombres Aleatorios hemos resuelto de la siguiente manera.

La lógica

En ocasiones, lo más importante en VBA es pensar cómo vamos a plantear nuestro ejercicio y qué restricciones tenemos. En el caso de este ejercicio nuestro esquema mental ha sido:

  • Para crear 200 elementos usamos un bucle de repetición (bucle for de 1 a 200)
  • Para que no se repitan los elementos primero generamos cada nombre y comprobamos si existe con una función. (bucle do while)
  • Si el nombre existe volvemos a generar un nombre. (función randbetween)

Resultado

Función principal (macro principal):

Sub Crear_Nombres()

Application.ScreenUpdating = False

Set nombres = Sheets("nombres")
Set listas = Sheets("listas")

Num_Nombre = InputBox("Número de nombresque se quieren crear")

For i = 1 To Num_Nombre

es_repetido = False

Do
N = WorksheetFunction.RandBetween(1, 22)
A1 = WorksheetFunction.RandBetween(1, 22)

Nuevo_Nombre = listas.Cells(N, 1) & " " & listas.Cells(A1, 2)

es_repetido = DUPLICADOS(i, Nuevo_Nombre)

If es_repetido = False Then nombres.Cells(i, 1) = Nuevo_Nombre

Loop While es_repetido = True
Next

nombres.Activate
End Sub

Auxiliarmente hemos definido una función (UDF) que nos permita evaluar si el nombre generado ya existe o no. La función es la siguiente:

Public Function DUPLICADOS(fila As Integer, Nombre As String) As Boolean

For j = 1 To fila
If nombres.Cells(j, 1) = Nombre Then
DUPLICADOS = True
Else
DUPLICADOS = False
End If
Next

End Function

Ejercicio Resuelto

En el siguiente enlace puedes encontrar el ejercicio resuelto.

Generador de nombres

Autor: Quique Arranz

Quique es un fanático del Excel desde que empezó a trabajar con ello hace unos pocos años. Adquirió su conocimiento a través de Google y de infinitas pruebas y más pruebas. Además, Quique es un entusiasta de su familia (mujer e hijos), del deporte y de la cerveza... no dudes en contactar con él para cualquier duda que tengas.