Neste artigo você verá uma planilha SUDOKU em Excel. A planilha faz a geração de SUDOKU automática.
No exemplo nós iremos utilizar a versão Microsoft 365 do Excel e para a geração dos dados usamos a função LAMBDA para gerar recursividade como iremos explicar abaixo.
Como funciona o SUDOKU?
SUDOKU é um jogo de raciocínio e lógica. O objetivo do jogo é completar todos os quadrados utilizando números de 1 a 9. Para completá-los basta seguir a seguinte regra: Não podem haver números repetidos nas linhas horizontais e verticais, assim como nos quadrados delimitados por linhas em negrito.
Para isso é necessário já deixar alguns números preenchidos para que seja necessário então encaixar os números conforme a cartela.
Veja conforme acima, aonde temos os números já previamente cadastrados e é esta geração dos números para o jogo que a planilha em Excel realiza.
Função SUDOKU Excel
Para realizar esta tarefa nós usamos a seguinte função:
=LAMBDA(strVertical;strHorizontal;strQuadrante;
LET(numAleatorio;ALEATÓRIOENTRE(1;9);
numLoc1;SEERRO(LOCALIZAR(numAleatorio;strVertical;1);0);
numLoc2;SEERRO(LOCALIZAR(numAleatorio;strHorizontal
;1);0);
numLoc3;SEERRO(LOCALIZAR(numAleatorio;strQuadrante;1);0);
SE(numLoc1+numLoc2+numLoc3>0;0;numAleatorio)))
A função Lambda do Excel permite que criemos funções próprias do Excel, no exemplo acima.
E na função LET, nós temos a criação de variáveis que são utilizadas no sistema.
Na variável numLoc1, estamos verificando se conseguimos encontrar usando Localizar se o número se encontra na string.
No vídeo explicamos se é localizado o número na posição, vertical, horizontal ou no quadrante.
Se não encontrar então o número aleatório que foi gerado é retornado.
Com isso então criamos a função SUDO no gerenciador de nomes.
Então criamos uma nova função chamada SUDOKU também no gerenciador de nomes:
=LAMBDA(strVertical;strHorizontal;strQuadrante;
LET(numSUDOKU;SUDO(strVertical;strHorizontal;strQuadrante);
SE(numSUDOKU = 0; SUDOKU(strVertical;strHorizontal;strQuadrante);numSUDOKU)))
Na função usamos a recursividade, aonde temos que se o valor retornado for 0, tente de novo, até que o retorno seja maior que 0.
Isso gera o número para cada posição do SUDOKU.
No entanto é necessário alterar seu Excel para que ele possa realizar cálculos com referência circular, cálculos iterativos.
Habilitar Cálculos Iterativos no Excel
Para que a função funcione é necessário que seja liberado o cálculo iterativo, pois senão ao usar a função ele irá exibir a mensagem de erro de Referências circulares.
Isso ocorre porque uma célula usa o resultado da outra para fazer os seus cálculos.
Para resolver, clique em Arquivo->Opções-Fórmulas Habilitar cálculo iterativo e dê ok.
Modelo do SUDOKU
Para a criação do SUDOKU nós criamos então um modelo no Excel de linhas e colunas de 9 linhas por 9 colunas conforme abaixo:
Com isso aplicamos então a função SUDOKU passando então a vertical, horizontal e o quadrante para verificar se os números não se repetem.
Com isso é necessário passar como variáveis usando UNIRTEXTO, a linha horizontal, vertical e também o quadrante, nos devidos parâmetros da função.
Com isso eles não serão mais repetidos.
Este cálculo é muito pesado e o cálculo de 81 valores seguindo estas condições é quase impossível pro Excel, por isso não mandamos ele calcular todos os números, mas alguns.
Assim, criamos uma coluna com todas as fórmulas configuradas, e uma outra planilha aonde copiamos fórmulas de posições aleatórias e colamos nesta outra para gerar o jogo, dado que não precisamos de todos os valores.
Gerar SUDOKU VBA
Para gerar o SUDOKU nós inserimos um módulo no Excel VBA, pressionando ALT+F11 e clicando em Inserir->Módulo.
No módulo inserido colocamos o seguinte código:
Public Sub lsSUDOKU()
Dim llinha As Integer
Dim lcoluna As Integer
Dim lcolect As Collection
Dim lQtde As Integer
SUDOKU.Range("B2:J10").ClearContents
With SUDOKU.Range("B2:J10").Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Set lcolect = New Collection
For i = 1 To SUDOKU.Range("numAleat").Value
lQtde = lcolect.Count
On Error Resume Next
Do
llinha = Int((9 * Rnd) + 2)
lcoluna = Int((9 * Rnd) + 2)
lcolect.Add llinha & lcoluna, llinha & lcoluna
Loop Until lcolect.Count > lQtde
SUDOKU.Cells(llinha, lcoluna).Value = gabarito.Cells(llinha, lcoluna).Formula
With SUDOKU.Cells(llinha, lcoluna).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
Next i
ActiveSheet.Calculate
SUDOKU.Range("B2:J10").Copy
SUDOKU.Range("B2:J10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SUDOKU.Range("A1").Select
Sheets("SUDOKU").Copy
ActiveSheet.Shapes.Range(Array("TextBox 2")).Delete
Range("L2:M2").ClearContents
ActiveSheet.Shapes.Range(Array("Picture 3")).Delete
Range("B2").Select
'MsgBox "SUDOKU Gerado!" + vbCrLf + "Boa diversão!"
End Sub
No código acima, nós fazemos os seguintes processos automaticamente:
- Limpar os valores da cartela
- Limpar as cores
- Sortear posições aleatórias do gabarito e colar
- Pintar as posições sorteadas
- Copiar os resultados das fórmulas como valores
- Exportar a planilha para poder jogar na planilha ou salvar
Tudo isso é feito no código acima aonde temos então uma automação que complementa a geração do jogo.
Download
Clique no botão abaixo para realizar o download da planilha de SUDOKU, com exemplo de dados:
Curso Excel Completo – Do Básico ao VBA
Quer aprender Excel do Básico, passando pela Avançado e chegando no VBA? Clique na imagem abaixo: