Continuando con algunas entradas lúdicas relacionadas a nuestro apasionante Excel, no podemos dejar de lado a un clásico de los pasatiempos: el Sudoku (
mas info....)
No me explayaré en la lógica del juego: tenemos un tablero de 9x9 en donde debemos completar con números del 1 al 9 las casillas, evitando que dichos números se repitan en la misma fila, columna o grupo de 3x3. Hasta ahí lo manejamos, mas o menos, todos. La cuestión pasa como armar un Sudoku en Excel y, como siempre, esta cuestión tiene mas de una forma de ser resuelta: desde mi punto de vista, con y sin macros. En este post analizaremos la segunda: utilizar formatos condicionales para crear un Sudoku:
el clásico juego, listo para ser utilizado en una planilla de cálculos
[+/-] Ver el resto / Ocultar
Las casillas en rojo (con fuente de color blanco) me están indicando los errores que cometí en el juego. Por ejemplo: El 1 se repite en la columna C, el 8 en la fila 2, el 4 en la columna G y a su vez en la fila 8 (dentro de su mismo grupo de 3x3)... habrá que mejorar la técnica y leer mas sobre los distintos algoritmos y pseudocódigo que existe para resolver este juego.
Este juego se podría realizar con macros y que ellas se encarguen de detectar el error, pero tengo muchos lectores que a veces desean ir un paso mas allá y obtener los mismos resultados sin recurrir a VBA. Y como en este caso se puede, hagamos el trabajo.
Como mencionaba mas arriba, toda la labor se lleva a cabo con formatos condicionales. Desde mi lógica (existen otras y, seguro, mejores) dividí el proyecto en tres etapas, para descomponer el problema en una serie de "problemitas" de mas sencilla resolución. Y los pasos fueron:
1) Detectar duplicados en una misma fila (ej: de C1 a K1)
2) Detectar duplicados en una misma columna (ej: de C1 a C9)
3) Detectar duplicados dentro de un mismo grupo de 3x3 (ej: C1:E3)
Da la gran (y muy oportuna) casualidad de que las versiones de Excel anteriores a la 2007 soportan hasta 3 formatos condicionales por rango, así que este ejemplo aplica a cualquier versión que tengamos instalada. Si el Sudoku tuviese mas reglas por analizar.... o creamos macros o nos compramos (?) un Excel mas nuevo. Sigamos con los pasos descriptos y los formatos condicionales (con funciones) que aplicamos en cada uno de ellos:
1) Seleccionamos el rango C1:K1 y nos vamos a Formato/Formato Condicional, para establecer la siguiente regla:
Este formato analizará el resultado de una función y devolverá verdadero si dentro del rango $C$1:$K1 se encuentra el mismo valor que en C1. Aquí hay dos cosas muy importantes a tener en cuenta:
a) El tipo de referencias utilizadas: verán que combino absolutas ($) con relativas, mas una mezcla de ambas. ¿Por que? Porque al "correr" el formato hacia la derecha los valores van cambiando y así se evalúan todas las celdas. C1 se convertirá en D1, E1, etc, etc, hasta llegar al final de la grilla.
b) La sintaxis de =CONTAR.SI() > 1: si esta función nos arroja como resultado un valor superior a 1, el formato condicional la evaluará como Verdadera y aplicará el formato que hayamos definido. En este caso: fondo rojo con letras blancas, en negrita.
2) Seleccionamos C1:C9, agregamos una nueva condición desde el formulario, y ponemos esto:
La explicación es la misma que la anterior, solo que ahora evaluamos por Columnas. Si el valor que está en C1 se repite en el rango C$1:C$9, CONTAR.SI() devolverá un valor mayor a 1 y Excel aplicará el formato condicional elegido.
¿Vemos como va quedando antes de ir al último paso?
vamos bien. Alerta sobre cada duplicidad encontrada en filas/columnas. Observemos la última grilla de 3x3: dentro de ella hay dos 4, lo cual está prohibido en este juego. En el siguiente paso lo solucionaremos
3) Seleccionamos una grilla de 3x3, por ejemplo C1:E3, agregamos la tercer y última condición, en donde ingresaremos casi lo mismo que vinimos haciendo hasta ahora, cuidando siempre el detalle de las referencias absolutas y relativas:
La grilla de 3x3 va con referencia absoluta, mientras que el valor para analizar (C1) lo dejo relativo, para que vaya "rotando" y evaluando cada uno de los 9 casilleros.
Y listo, esto es todo. Mas allá de que nos guste o no jugar el Sudoku (nunca jugué), aquí lo importante radica en comprender como muchas veces los Formatos Condicionales "no andan bien".... por que referenciamos mal los rangos. Esos $ (o sus ausencias) tienen su razón de ser y si los aplicamos (o no) a un rango amplio debemos razonar como si se realizara un bucle: Excel recorre celda x celda analizando las funciones y/o condiciones que hayamos impuesto. Si a una celda le antepongo, en su letra o número, un $ estoy "cortando" ese bucle, lo cual, como se ha visto, puede llegar a ser de gran utilidad.
Suerte, y algún día que tenga bastante tiempo levantaré la forma de generar un algoritmo que permita la resolución de este juego.
Link al archivo (avisen si algo no funciona... hasta donde probé andaba todo bien =) )
genial
ResponderEliminarOk, muchas gracias
ResponderEliminar