De acuerdo a la definición lo aleatorio es algo que depende del azar,
de la suerte o de un proceso casual. Procede del vocablo latino aleatorius.
Para generar números aleatorios en VBA usamos
la función RND, la función recibe como parámetro un valor de tipo single.
Dependiendo de este parámetro será el valor retornado por la función RND:
Si el parámetro es menor que cero retorna el
mismo número, mayor que cero el siguiente numero
aleatorio en la secuencia, igual a
cero el número generado por última vez, si se omite el parámetro retorna el
siguiente número aleatorio en la
secuencia.
Para ejemplificar el uso de la función RND , creamos una macro que
genera números aleatorios en un
rango de valores.
Tenemos la siguiente hoja de cálculo:
En la celda B4 se ingresa el valor inferior del
rango y en la celda C4 el valor superior. En la celda C4 ingresamos la cantidad
de números aleatorios que queremos
generar.
Definimos una rutina principal
En esta rutina se valida que exista un valor
inicial y otro final, además que el valor inicial sea menor al final. Si esta condición
se cumple se borran los datos que tenga la columna E y se invoca la rutina
generadora de números aleatorios.
La rutina recibe como parámetro el rango dentro
del cual se generaran los números aleatorios.
Definimos una variable en la que almacenaremos el número aleatorio encontrado, una variable para contar las filas de
la hoja de cálculo y la iniciamos en cuatro.
Creamos un ciclo que inicia en el número cuatro
hasta el valor contenido en la celda D4 de la hoja de cálculo.
Inicializamos el generador de números aleatorios con la función Randomize. Para encontrar el número aleatorio escribimos la
siguiente instrucción:
aleatorio
= CInt(((numfin - numini + 1) * VBA.Rnd()) + numini)
Donde numfin es el número mayor y numini el número
menor
Espero que esta macro te sea útil, si tienes
dudas o comentarios escríbenos a macrosymacros@gmail.com.
hola me llamo gustavo. tengo un codigo en vbs para generar numeros aleatorios del numero 0 hasta el numero 45 con 6 cifras.
ResponderEliminarel problema es que cuando abrimos el excel y precionamos el boton generar siempre el primer numero generado es el mismo, cerramos el excel y lo abrimos de nuevo y generamos un nuevo numero y el primer numero siempre es el mismo.
se puede modificar el codigo para hacer que genere un numero diferente el cerrar y abrir el excel. se los agradeceria mucho.
este es el codigo:
ResponderEliminarFunction AleatoriosUnicos(Inferior As Integer, Superior As Integer, Cantidad As Integer) As String
Dim iArr As Variant
Dim i As Integer
Dim r As Integer
Dim temp As Integer
Application.Volatile
ReDim iArr(Inferior To Superior)
For i = Inferior To Superior
iArr(i) = i
Next i
For i = Superior To Inferior + 1 Step -1
r = Int(Rnd() * (i - Inferior + 1)) + Inferior
temp = iArr(r)
iArr(r) = iArr(i)
iArr(i) = temp
Next i
For i = Inferior To Inferior + Cantidad - 1
AleatoriosUnicos = AleatoriosUnicos & " " & iArr(i)
Next i
AleatoriosUnicos = Trim(AleatoriosUnicos)
End Function
Antes de la línea:
ResponderEliminarr = Int(Rnd() * (i - Inferior + 1)) + Inferior
debes introducir la función Randomize, de esta forma:
Randomize
r = Int(Rnd() * (i - Inferior + 1)) + Inferior
hola y buen día
ResponderEliminarverán estoy intentando generar hasta 2000 números aleatorios únicos, pero aparir de 500 obtengo el error de desbordamiento
el código que uso es:
Function AleatoriosUnicos(Inferior As Integer, Superior As Integer, Cantidad As Integer) As String (igual al del ejemplo del anterior usuario mas arriba para el calculo)
y para el botón de acción, Private Sub CommandButton1_Click()
Range("B21", "M37").Value = AleatoriosUnicos(Range("G2").Value, Range("H2").Value, Range("K2").Value)
End Sub
el motivo de este comentario es preguntarles si conocen un código que admita un mayor rango, de existir, u otro método que me recomienden. gracias