TUTORIALES DE EXCEL

Cómo crear un Sudoku en Excel

Cómo crear un Sudoku en Excel

¿Cómo crear un Sudoku en Excel?

En el video tutorial ejemplificamos como podemos desarrollar un juego Sudoku mediante el uso de fórmulas y macros en Excel.

Los pasos a seguir son los siguientes:

    1.  Creamos tres hojas llamadas «Bloques», «Sudoku» y «Juego».
    2. En la hoja Bloques definimos el rango B14:J16 con números aleatorios mediante la función aleatorio. Luego definimos en el rango B18:J20 tres líneas que jerarquizen del 1 al 9 los valores aleatorios del rango anterior utilizando la combinación de funciones JERARQUIA Y CONTAR.SI para asignar el valor 1 al número aleatorio más cerca del 1 y el valor 9 al valor más cercano al 0. Podés ver más acerca de ésta fórmula aquí: «Crear un listado de números aleatorios sin repetición«. Finalmente configuramos un tablero en el rango B2:J10 y asignamos tres bloques de números de los 9 bloques que conforman al Sudoku con los tres rangos jerarquizados del 1 al 9 mencionados anteriormente. En el tutorial se asignan a los bloques superior izquierdo, central e inferior derecho.
    3. El paso siguiente será construir una grilla para obtener los números posibles que pueden ir en cada casillero de todo el resto de casilleros no ocupados hasta el momento en el Sudoku. (6 bloques restantes) Utilizamos todo el rango M1:DP21 para tal fin. Para obtener los números posibles por casillero utilizamos dos columnas del rango por casillero a analizar. Por ejemplo, en el video se muestra como podemos obtener los números posibles para el casillero B5. La primer columna con fondo blanco define los números que ya están ocupados en función de los ejes horizontal y vertical de todo el Sudoku y también de los casilleros restantes para el bloque al que pertenece el casillero en curso. Ásignamos mediante referencia directa a cada casillero dentro del Sudoku. La otra columna con fondo gris define los números libres o disponibles para asignar al casillero en curso. La fórmula que utilizamos es la siguiente:
      =SI(CONTAR.SI($M$2:$M$21;A2);"";A2)
      y debemos arrastrarla hasta la última celda del rango (fila 10). Finalmente en la fila 11 de la columna color gris definimos para cada casillero un valor de entre todos los disponibles planteados con la fórmula anterior. Para ello la fórmula matricial que utilizamos es la siguiente:
      {=INDICE(N2:N10;COINCIDIR(VERDADERO;ESNUMERO(N2:N10);0))}

      El criterio de selección que utilizamos consiste en asignar el primer número hallado del rango de la columna color gris de arriba hacia abajo, y por tal motivo va a ser el primer número más bajo de todo el rango. Si bien esto condiciona la estructura del Sudoku, existen numerosas formas para su creación y ésta no deja de ser una alternativa sumamente válida.
    4. A medida que completamos con el desarrollo de los números a asignar por casillero, notamos como cada columna de color blanco (números ya ocupados) va obteniendo información del número anterior. Es decir que podría verse como un sistema de capas, donde cada número posterior a analizar va teniendo menos números disponibles por ya cruzarse en sus ejes o compañeros del bloque con números ocupados. Utilizamos un sistema de colores para asignar a cada casillero para agilizar la identificación visual.
    5. En la hoja «Sudoku» diagramamos un tablero de Sudoku en el rango B2:J10 y lo referenciamos directamente al mismo rango de la hoja «Bloques». Luego sobre los rangos L2:L10 y B12:J12 utilizamos la función suma para contabilizar la suma de todos los valores por fila/columna para nuestro Sudoku. Sabemos que cada fila o columna del sudoku debe sumar en total 45, debido a que la suma de todos los números del 1 al 9 totalizan 45. De esta forma podemos controlar si el Sudoku es correcto. A su vez, utilizamos una fórmula en las celdas O3 y O4 para obtener la cantidad de errores por eje (horizontal y vertical) sobre estos dos rangos de control. La fórmula por ejemplo utilizada en O3 es la siguiente:
      =SUMAPRODUCTO(--ESERROR(L2:L10))
    6. En el rango S2:BB10 diagramamos cuatro modelos de Sudoku para alternar aleatoriamente a medida que creamos un nuevo juego. Estos modelos tienen espacios en blanco y celdas referenciadas directamente hacia el rango del Sudoku B2:J10. Podemos generar la cantidad de modelos que queramos para hacer más variable el juego, y también podemos crear configuraciones más simples o complejas dependiendo del nivel de dificultad que quisieramos darle al juego.
    7. En la celda O8 utilizamos la función ALEATORIO.ENTRE para asignar un valor entre 1 y 4, que es equivalente a la cantidad de tableros disponibles para asignar a nuestro juego en curso. Luego, en el rango AE13:AM21 utilizamos una fórmula para obtener el diseño del tablero para jugar en función del número aleatorio que haya salido en la celda O8. La fórmula utilizada en la primer celda AE13 (y que debemos arrastrar a lo largo y ancho de todo el tablero) es la siguiente:
      =SI(SI.CONJUNTO(Sudoku!$O$8=1;Sudoku!S2;Sudoku!$O$8=2;Sudoku!AB2;Sudoku!$O$8=3;Sudoku!AK2;Sudoku!$O$8=4;Sudoku!AT2)=0;"";SI.CONJUNTO(Sudoku!$O$8=1;Sudoku!S2;Sudoku!$O$8=2;Sudoku!AB2;Sudoku!$O$8=3;Sudoku!AK2;Sudoku!$O$8=4;Sudoku!AT2))
    8. El próximo paso consiste en generar una macro que nos permita realizar iteraciones con nuestros números aleatorios de los tres bloques iniciales y las asignación de todos los otros casilleros mediante nuestro sistema, para de esta forma obtener un Sudoku correcto sin errores y listo para jugar. Para ello, la instrucción que debemos copiar dentro de la ventana de visual basic y de nuestra hoja «Sudoku», es la siguiente:
Option Explicit

Sub Inicio()
    Dim i As Long
    
    For i = 1 To 500
        Application.Calculate
        If Range("O3") < 1 And Range("O4") < 1 Then Exit For
    Next i
    
End Sub

 

Esta macro realiza 500 iteraciones y se detiene cuando encuentra que en nuestras dos celdas de conteo de errores el total es menor a 1, es decir 0 ya que nuestro conteo se basa en números enteros.

  1. Luego, en la hoja «Juego» diagramamos un Sudoku en B2:J10 referenciando directamente al tablero final de la hoja «Sudoku», y colocamos en la celda E12 una fórmula para controlar que la suma de nuestras dos celdas de conteo de errores de la hoja «Sudoku» sean iguales a 0. En caso afirmativo que nos indique «OK» y en caso negativo que nos indique «REINTENTAR».
  2. Creamos un botón de formulario y le asignamos la macro generada para ejecutar las iteraciones en búsqueda de nuestro Sudoku correcto.
  3. Finalmente nos digirimos a las opciones del menú «Archivo» y dentro de la sección fórmulas cambiamos el cálculo a manual para poder copiar los valores (que vienen de un desarrallo aleatorio) y pegarlos como valores en otro rango.
  4. Copiamos el rango del Sudoku en B2:J10 y lo pegamos como valor en un rango paralelo. En el video utilizamos el rango M2:U10. De esta forma ya podemos completar nuestro Sudoku en éste último tablero/rango y si queremos ver la resolución, podemos visualizarla en la hoja «Sudoku».

 

Te recomiendo ver el siguiente link con más videos de Tutoriales esenciales de Excel AQUÍ.

Salvo aclaración, todas las fórmulas y macros de este sitio están configuradas para aplicarse sobre la celda A1. Algunas fórmulas se encuentran encerradas entre llaves {} debido a que son fórmulas matriciales. Estas llaves no deben introducirse tecleándolas, sino que se generan automáticamente al aceptar la fórmula pulsando Control+Shift+Enter al mismo tiempo. Las fórmulas de este sitio son compatibles con versiones de Microsoft Excel® 2010 o superiores.