Si desea generar una lista de números aleatorios únicos, puede usar las funciones RANDBETWEEN & VBA RND. En este artículo, generaremos 3 números únicos de la lista proporcionada .

Puede encontrar la pregunta original http://www.excelforum.com/excel-programming-vba-macros/1093315-vba-for-do- while-loop.html[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:

img1

===

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 Código, seleccione Visual Basic

  • Copie el siguiente código en el módulo estándar

img2

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

Sub RandomNumbers()

Dim ws As Worksheet

Dim ar As Variant

Dim RandomNum As Long

Dim i As Integer

Dim myVal As Long

Randomize

Set ws = ThisWorkbook.Sheets("Numbers")

With 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

img3

  • A medida que ejecutamos el código VBA, la lista única de números se generará automáticamente

img4

img5

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 Set ws = ThisWorkbook.Sheets («Numbers»): esta línea asegurará que el código se ejecute solo en la hoja Numbers La siguiente línea de código usará la instrucció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 ciclo 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.

image 48

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 a [email protected]