domingo, 2 de abril de 2017

MACRO PARA GENERAR NUMEROS ALEATORIOS EN VBA

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


 Definimos una variable de tipo worksheet que nos sirve para identificar la hoja de cálculo, la variable ffinal que nos indicara cual es la última fila con datos en la columna E de la hoja de cálculo.

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.