viernes, 23 de marzo de 2012

Números aleatorios no repetidos

Probablemente utilizando referencias circulares puedan generarse números aleatorios no repetidos; sin embargo, éste es uno de los casos en los que está claramente indicado el uso de macros.

En este ejercicio, vamos a generar una lista de 16 números aleatorios no repetidos para elegir las 16 cartas que se repartirán entre los cuatro jugadores de una partida de mus.

Cada vez que pulsemos el botón Repartir cartas, se ejecutará la macro que producirá una nueva lista de números. Luego, con fórmulas, mostraremos las cartas correspondientes en forma gráfica y en forma de texto.

Podemos bajarnos una mesa de Internet o hacerla nosotros con las herramientas que tengamos a mano. La del ejemplo está realizada con las herramientas gráficas de Excel. Las imágenes de las cartas se han obtenido escaneando individualmente cada carta, guardándolas en formato .jpg e insertándolas en la hoja "Cartas" (Insertar + Imagen).

En la hoja "Trastienda" hay una lista con las cuarenta cartas de la baraja y otra con los nombres de los posibles jugadores. Usaremos esta hoja como hoja auxiliar (columnas C y D).

En las celdas C2:C6 de la hoja "Sala de juego" escribimos los nombres de cuatro jugadores. Para ello, podemos asociar a cada celda una lista con los datos de la columna B de la hoja "Trastienda". Si queremos evitar repeticiones, podemos usar la técnica explicada en el ejercicio Listas autoajustables.

Ponemos cuatro cuadros de texto sobre la mesa, en los lugares que ocuparán los jugadores.
Seleccionamos el primero y, en la barra de fórmulas, escribimos: =$C$3
Seleccionamos el segundo y, en la barra de fórmulas, escribimos: =$C$4
Seleccionamos el tercero y, en la barra de fórmulas, escribimos: =$C$5
Seleccionamos el cuarto y, en la barra de fórmulas, escribimos: =$C$6

Quitamos el borde y el relleno de los cuadros de texto y elegimos el tipo de letra que nos parezca más conveniente. La hoja habrá quedado así:

Accedemos al editor de VBA pulsando Alt + F11, seleccionamos Insertar + Módulo y escribimos el siguiente procedimiento:

Salimos del editor pulsando Alt + Q.

En la hoja "Sala de juego" accedemos a Programador + Insertar + Botón (control de formulario) e insertamos un botón en la parte superior de la hoja. Se mostrará el cuadro de diálogo Asignar macro. Seleccionamos el procedimiento "Números_no_repetidos" y hacemos clic en Aceptar.

Ponemos en color rojo y centrado el texto siguiente: Repartir cartas.

Cada vez que pulsemos el botón, en el rango C2:C17 de la hoja "Trastienda" se generará una lista de 16 números no repetidos comprendidos entre 1 y 40. En la columna D transformaremos estos números en cartas según el orden que les hemos asignado en la columna A.

En la celda D2 de la hoja "Trastienda" escribimos:
=INDICE($A$2:$A$41;C2;1)

Extendemos la fórmula hasta la fila 17.

Vamos a poner las cartas del Jugador 1 en la posición que les corresponde en la mesa con ayuda de la Cámara fotográfica de Excel que, por defecto, no está visible, pero que podemos colocarla en la barra de herramientas de acceso rápido. Para ello, accedemos a Archivo + Opciones + Barra de herramientas de acceso rápido. Elegimos Todos los comandos, seleccionamos Cámara, pulsamos Agregar y Aceptar.

Seleccionamos D2:D5 y hacemos clic en la Cámara de la barra de herramientas de acceso rápido.

En la hoja "Sala de juego" hacemos clic en un lugar vacío. Se copiará una imagen vinculada de las celdas seleccionadas. Arrastramos el objeto vinculado a la posición de la primera jugadora (Petra), eliminamos el borde y repetimos el proceso con el resto de los jugadores.

También podemos vincular imágenes de un rango de celdas sin usar la cámara de Excel. Para ello, seccionamos el rango (por ejemplo, D14:D17 de la hoja "Trastienda"), pulsamos Ctrl + C, seleccionamos la hoja "Sala de juego" y hacemos clic con el botón derecho en una zona vacía; en el menú emergente elegimos Pegado especial + Imagen vinculada (M).

En Excel 2003, después de seleccionar el rango con Ctrl + C, vamos a la hoja donde queremos vincular la imagen y, manteniendo pulsada la tecla Mayúscula, abrimos el menú Edición donde seleccionamos Pegar vínculos de imagen (esta opción no aparece en el menú si no mantenemos pulsada la tecla Mayúscula).

Vamos con las imágenes de las cartas. Para empezar, necesitamos crear 16 "nombres" (Fórmulas + Asignar nombre) con las siguientes definiciones:

En la hoja "Cartas", seleccionamos el "As de oros" (vale cualquier carta) y pulsamos Ctrl + C.

En la hoja "Sala de juego", pulsamos 16 veces Ctrl + V, abrimos las cartas en abanico de 4 en 4 colocándolas sobre cada jugador. Si es necesario, recolocamos las lista de las cartas en la posición correcta y las mandamos al fondo (botón derecho, Enviar al fondo).

Hacemos clic en la primera carta (la izquierda de Petra) y, en la barra de fórmulas, escribimos: =carta1
Hacemos clic en la segunda carta y, en la barra de fórmulas, escribimos: =carta2
Hacemos clic en la tercera carta y, en la barra de fórmulas, escribimos: =carta3
...
Hacemos clic en la última carta (la derecha de Federico) y, en la barra de fórmulas, escribimos: =carta16

 
 
 

No hay comentarios:

Publicar un comentario