Ya llevo un tiempo sin colgar ninguna entrada … el motivo es que estoy bastante hasta arriba de trabajo y no tengo mucho tiempo libre para dedicárselo al blog.

Pero bueno, hoy voy a mostrar un pequeña aplicación que sirve para generar números aleatorios y que seguro os parece una buena idea a la hora de tener que pensar, por ejemplo, los números de la lotería.

Para realizarlo utilizaremos la hoja de cálculo como base para generar los números y un userform para mostrarlos como si fuese un programa.

Lo primero que vamos a hacer es confeccionar la hoja con los números, por lo que vamos a utilizar tres funciones:

«Aleatorio», «Aleatorio.entre» y «Jerarquía»

Como siempre, una explicación de cada una de las funciones y luego el caso práctico:

  • Función Aleatorio: Devuelve un número real aleatorio mayor o igual a 0 y menor que 1, distribuido uniformemente. Cada vez que se calcula la hoja de cálculo, se devuelve un número real aleatorio nuevo.
    Sintaxis: ALEATORIO( )
  • Función Aleatorio.entre: Devuelve un número entero aleatorio entre los números que especifique. Devuelve un nuevo número entero aleatorio cada vez que se calcula la hoja de cálculo.
    Sintaxis: ALEATORIO.ENTRE(inferior; superior)
    La sintaxis de la función ALEATORIO.ENTRE tiene los siguientes argumentos:
    Inferior    Obligatorio. El menor número entero que la función ALEATORIO.ENTRE puede devolver.
    Superior    Obligatorio. El mayor número entero que la función ALEATORIO.ENTRE puede devolver.
  • Función Jerarquía: Devuelve la jerarquía de un número en una lista de números. La jerarquía de un número es su tamaño en comparación con otros valores de la lista.
    Sintaxis: JERARQUIA(número;referencia;[orden])
    La sintaxis de la función JERARQUÍA tiene los siguientes argumentos:
    Número     Obligatorio. El número cuya jerarquía (clasificación) desea conocer.
    Referencia     Obligatorio. Una matriz de una lista de números o una referencia a una lista de números. Los valores no numéricos se pasan por alto.
    Orden     Opcional. Un número que especifica cómo clasificar el argumento número

Después de definir las funciones a utilizar, vamos a pensar en el juego del que queremos que Excel nos genere números aleatorios. Por ejemplo, un juego que tiene 49 casillas para apostar 6 números del 1 al 49. Pues bien creamos una serie de número aleatorios hasta del 1 al 49 en una columna de Excel, y de la siguiente forma: =ALEATORIO()*100, es necesario multiplicarlo por 100 dado que el resultado es del 0 al 1, por lo tanto de esta forma tendremos número enteros.

Una vez que tengamos la columna con los números aleatorios generados, ahora tendremos que idear la forma de que esos números NO se repitan, pues entonces no nos serviría el modelo. Para ello vamos a utilizar la función Jerarquía. En la columna de al lado escribimos la siguiente fórmula:
=JERARQUIA($A3;$A$3:$A$51)
Os debería quedar así:

En rojo está la función jerarquía que contiene las primeras posiciones no repetidas del listado de aleatorios de la izquierda, así aseguramos que no saldrán repetidos los números.

Y podemos seguir haciéndolo con diferentes tipos de juegos, con estrellas, con más o menos números, etc. Pero hay un detalle que os quiero comentar, si lo que tenemos que generar son números de 0 a cualquier valor, tendremos que utilizar la función aleatorio.entre (). De hecho, en este ejemplo utilizo esa función para generar aleatorios entre 0 y 9 (de el Gordo de la primitiva 😉 Pero esta fórmula solo es válida para Excel 2007 y superiores, así que si tenéis 2003 os va a generar un error el programa.

Os muestro ahora los cálculos y los números aleatorios para los tres juegos propuestos.

Los número en rojo serán los números que vamos mostrar a través del userform. Ahora solo queda mostrar los resultados en un formato que sea interactivo y a la vez proporcione una usabilidad agradable, para ello he usado un userform, aunque hay otras formas de hacerlo.

Primero debemos tener en cuenta que los datos de la hoja1 son la base de la información, por lo tanto debemos ocultarla para que no pueda ser manipulada. Vamos al editor de VBA y en el módulo «Thisworkbook» ponemos la escribimos lo siguiente.

Sub workbook_OPEN()
'al abrir el generador de núemros la hoja1 se ocultará
Worksheets("Hoja1").Visible = xlSheetVeryHidden
'y mostrará el userform1
UserForm1.Show
End Sub

Ahora tenemos que crear el userform1 que ofrecerá la información, hay muchas formas de hacerlo, yo he optado por varias solapas, cada una con un juego diferente:

Con la información de la hoja1 y los textbox del userform vamos introduciendo esta macro, que os voy a ir comentando en verde (explico el primer juego solamente, los otros son iguales y siguen la misma lógica):

Al pulsar en el botón «Suerte» de la primera solapa se realizan las siguientes instrucciones:

Private Sub CommandButton1_Click()
'PRIMITIVA
'desactivamos la actualización de pantalla para que no parpadee con cada cálculo.
Application.ScreenUpdating = False
'Mostramos la hoja1 que anteriormente habíamos ocultado.
Worksheets("Hoja1").Visible = xlSheetVisible
'seleccionamos la hoja1.
Worksheets("Hoja1").Select
'activamos la celda “a1? de la hoja1 para que la función aleatorio muestre los números.
Worksheets("Hoja1").Range("A1").Select
ActiveCell.FormulaR1C1 = " "
'mostramos los números de la hoja1 en cada uno de los textbox.
TextBox1 = Worksheets("Hoja1").Range("B3").Value
TextBox4 = Worksheets("Hoja1").Range("B4").Value
TextBox3 = Worksheets("Hoja1").Range("B5").Value
TextBox2 = Worksheets("Hoja1").Range("B6").Value
TextBox6 = Worksheets("Hoja1").Range("B7").Value
TextBox5 = Worksheets("Hoja1").Range("B8").Value
'volvemos a ocultar la hoja1.
Worksheets("Hoja1").Visible = xlSheetVeryHidden
End Sub

Private Sub CommandButton2_Click()
'EUROMILLONES
Application.ScreenUpdating = False
Worksheets("Hoja1").Visible = xlSheetVisible
Worksheets("Hoja1").Select
Worksheets("Hoja1").Range("A1").Select
ActiveCell.FormulaR1C1 = " "
TextBox7 = Worksheets("Hoja1").Range("F3").Value
TextBox10 = Worksheets("Hoja1").Range("F4").Value
TextBox9 = Worksheets("Hoja1").Range("F5").Value
TextBox8 = Worksheets("Hoja1").Range("F6").Value
TextBox12 = Worksheets("Hoja1").Range("F7").Value
'ESTRELLAS
TextBox19 = Worksheets("Hoja1").Range("F10").Value
TextBox11 = Worksheets("Hoja1").Range("F11").Value
Worksheets("Hoja1").Visible = xlSheetVeryHidden
End Sub

Private Sub CommandButton3_Click()
'EL GORDO
Application.ScreenUpdating = False
Worksheets("Hoja1").Visible = xlSheetVisible
Worksheets("Hoja1").Select
Worksheets("Hoja1").Range("A1").Select
ActiveCell.FormulaR1C1 = " "
TextBox14 = Worksheets("Hoja1").Range("J3").Value
TextBox17 = Worksheets("Hoja1").Range("J4").Value
TextBox16 = Worksheets("Hoja1").Range("J5").Value
TextBox15 = Worksheets("Hoja1").Range("J6").Value
TextBox18 = Worksheets("Hoja1").Range("J7").Value
'MATRIZ
TextBox20 = Worksheets("Hoja1").Range("I3").Value
Worksheets("Hoja1").Visible = xlSheetVeryHidden
End Sub

Por último, en cada botón de Salir ponemos el siguiente código.

Private Sub CommandButton4_Click()
Application.DisplayAlerts = False
Application.Quit
End Sub

Private Sub CommandButton5_Click()
Application.DisplayAlerts = False
Application.Quit
End Sub

Private Sub CommandButton6_Click()
Application.DisplayAlerts = False
Application.Quit
End Sub

Esto sería lo relativo al userform1, pero nos quedaría un pequeño detalle, tenemos que limpiar los datos del userform cuando salgamos de la aplicación, aunque el comando «Application.DisplayAlerts = False» ya impide que se guarde el trabajo, siempre es conveniente dejar en blanco los textbox. Para ello añadimos al modulo del libro «Thisworkbook» el código para limpiar todos los textbox:

Sub workbook_CLOSE()
'cuando cerramos el libro los datos mostrados en los textbox se borran.
'PRIMITIVA
TextBox1 = Empty
TextBox4 = Empty
TextBox3 = Empty
TextBox2 = Empty
TextBox6 = Empty
TextBox5 = Empty

'EUROMILLONES
TextBox7 = Empty
TextBox10 = Empty
TextBox9 = Empty
TextBox8 = Empty
TextBox12 = Empty
'ESTRELLAS
TextBox19 = Empty
TextBox11 = Empty

'EL GORDO
TextBox14 = Empty
TextBox17 = Empty
TextBox16 = Empty
TextBox15 = Empty
TextBox18 = Empty
'MATRIZ
TextBox20 = Empty
End Sub

El resultado es el siguiente:

Como siempre os dejo el enlace para descargar la aplicación. Importante, la hoja1 la podéis ver entrando por el programador y pulsando encima de la hoja y en propiedades Visible, elegís la opción «-1 xlsheetvisible». El programa funciona con Excel 2007 o superior, en versiones anteriores, el juego 3 (el gordo), no funcionará y dará un error.

Descarga el archivo pulsando enGENERADOR NÚMEROS ALEATORIOS LOTERÍA

 

Comparte este post