Si desea generar una lista de números aleatorios únicos, puede usar las funciones RANDBETWEEN y VBA RND. En este artículo, generaremos 3 números únicos de la lista proporcionada.
Puedes encontrar la pregunta original aquí.
Pregunta: Quiero que una macro genere una lista de 3 números aleatorios a partir de una lista de números guardados en la columna A. Existe una condición por la que se debe cuidar el código VBA. La condición es que existen 3 números en la columna B, por lo tanto, la macro necesita crear una lista de números que no han ocurrido una vez en la columna B. De esta manera, podemos tener una lista de números únicos en las columnas B y C.
A continuación se muestra la instantánea del ejemplo que tenemos:
Para obtener la lista de números aleatorios únicos; debemos seguir los pasos a continuación para iniciar el editor de VB
- Haga clic en la pestaña Desarrollador
- Desde el grupo de código, seleccione Visual Basic
- Copie el siguiente código en el módulo estándar
Sub RandomNumbers () Dim ws Como hoja de trabajo Dim ar como variante Dim RandomNum tan largo Dim i como entero Dim myVal tan largo Randomize Set ws = ThisWorkbook.Sheets ("Numbers") Con ws ar = .Range ("A" & Rows.Count ) .End (xlUp) .Row .Range ("C1: C3"). ClearContents For i = 1 To 3 Do RandomNum = Int ((1 - ar + 1) * Rnd + ar) myVal = .Range ("A" & RandomNum) .Value Loop until Range ("B1: C24"). Find (what: = myVal, lookat: = xlWhole) Is Nothing .Range ("C" & i) .Value = myVal Next i End With End Sub
- Para ejecutar la macro, podemos presionar la tecla F5 desde el teclado si está activo en la pantalla del Editor de Visual Basic
- Otra forma de ejecutar la macro es usando la tecla “ALT + F8”; seleccione la macro y haga clic en el botón Ejecutar
- A medida que ejecutamos el código VBA, la lista única de números se generará automáticamente
Explicación del código:
En el código anterior, usaremos la función RND & INT junto con For loop & Do loop para obtener el resultado.
- Declaramos Dim ws como Hoja de trabajo; el propósito de declarar ws como Hoja de trabajo es que solo queremos que el código se ejecute en una hoja de trabajo específica, es decir, Números en nuestro ejemplo
- Dim RandomNum As Long: esto guardará los números únicos
- Establecer ws = ThisWorkbook.Sheets ("Numbers"): esta línea garantizará que el código se ejecute solo en la hoja de Numbers
- La siguiente línea de código usará la declaración With
- ar = .Range ("A" & Rows.Count) .End (xlUp) .Row: esta línea guardará la última celda en la columna A (24 en nuestro ejemplo)
- .Range ("C1: C3"). ClearContents: esta línea borrará cualquier contenido existente en el rango C1: C3
- A continuación, ejecutaremos el bucle For comenzando de 1 a 3 veces con Do Loop para generar una lista de números aleatorios y verificar que no haya duplicados en el rango existente, es decir, la columna B
Conclusión: Podemos generar una lista de números aleatorios distintos de una lista en Microsoft Excel con pequeños ajustes en el código VBA anterior.
Si te gustaron nuestros blogs, compártelo con tus amigos en Facebook. Y también puedes seguirnos en Twitter y Facebook.
Nos encantaría saber de usted, háganos saber cómo podemos mejorar, complementar o innovar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico