Genere una lista de números aleatorios únicos usando VBA en Microsoft Excel

Anonim

En este artículo, crearemos una función personalizada para generar una lista de números únicos y aleatorios entre los rangos especificados.

En este ejemplo, podemos ejecutar la macro haciendo clic en el botón "Enviar". Antes de ejecutar la macro, tenemos que ingresar valores para cuatro parámetros. Hemos proporcionado el valor de límite inferior en la celda C12, el límite superior en la celda C13, el número de aleatorios únicos requeridos en la celda C14 y la dirección de destino donde se emitieron se requieren en la celda C15.

Explicación lógica

Hemos creado la función personalizada "UniqueRandomNumbers" para generar una lista de números únicos y aleatorios. Esta función toma el número requerido, el límite inferior y el límite superior como parámetros de entrada.

Hemos creado la macro "TestUniqueRandomNumbers" para llamar a la función personalizada "UniqueRandomNumbers". Esta macro se ejecuta haciendo clic en el botón "Enviar". Esta macro toma el valor de entrada del usuario del rango C12 a C15.

Explicación del código

i = CLng (Rnd () * (ULimit - LLimit) + LLimit)

La fórmula anterior se utiliza para crear el número aleatorio entre el límite superior e inferior definido. La función Rnd () crea un número aleatorio entre 0 y 1.

Rango (Selección, Selección. Desplazamiento (Contador - 1, 0)). Valor = _

Application.Transpose (RandomNumberList)

El código anterior se usa para transponer la salida de la matriz y asignar la salida al destino especificado.

Siga a continuación para obtener el código

 Opción Función explícita UniqueRandomNumbers (NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'Declarando variables Dim RandColl As Collection Dim i As Long Dim varTemp () As Long' Verificación de validación para el valor especificado por el usuario Si NumCount ULimit Then UniqueRandomNumbers = "El límite inferior especificado es mayor que el límite superior especificado" Finalizar la función de salida If If NumCount> (ULimit - LLimit + 1) Then UniqueRandomNumbers = "El número de número aleatorio único requerido es mayor que el número máximo de número único que puede existir entre límite y límite superior "Exit Function End If 'Creando nuevo objeto de colección Set RandColl = New Collection Randomize Do On Error Resume Next' Calculando el número aleatorio que existe entre el límite inferior y superior i = CLng (Rnd () * (ULimit - LLimit) + LLimit) 'Insertar el número aleatorio único en la colección RandColl.Add i, CStr (i) On Error GoTo 0' Bucle hasta que la colección tenga elementos iguales a numCount Bucle hasta RandColl.Count = Num Count ReDim varTemp (1 To NumCount) 'Asignación de valor de los elementos de la colección a varTemp array For i = 1 To NumCount varTemp (i) = RandColl (i) Siguiente i UniqueRandomNumbers = varTemp Set RandColl = Nothing Borrar varTemp Fin de función Sub TestUniqueRandomNumbers () 'Declarar variables Dim RandomNumberList como variante Dim Contador como largo, LowerLimit como largo, UpperLimit como largo Dim Dirección como cadena' Obteniendo los valores ingresados ​​por el usuario Contador = Rango ("C14"). Valor Límite inferior = Rango ("C12" ) .Value UpperLimit = Range ("C13"). Value Address = Range ("C15"). Value 'Llamando a la función personalizada UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers (Counter, LowerLimit, UpperLimit)' Seleccionando el destino Range (Address) .Select 'Assigning el valor en el rango de destino (Selección, Selección.Desplazamiento (Contador - 1, 0)). Valor = _ Aplicación.Transponer (Lista de números aleatorios) Fin Sub 

Si te gustó este blog, compártelo con tus amigos en Facebook. Además, puede seguirnos en Twitter y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico