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.