SUDOKU Excel – Planilha de Geração de SUDOKU

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.

sudoku excel 1

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:

sudoku excel 2

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:

  1. Limpar os valores da cartela
  2. Limpar as cores
  3. Sortear posições aleatórias do gabarito e colar
  4. Pintar as posições sorteadas
  5. Copiar os resultados das fórmulas como valores
  6. 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:

Baixe a planilha

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:


Marcos Rieper

Pai, marido, professor e consultor em Excel.

Obrigado por ler este artigo, este blog foi criado para difundir o conhecimento em Excel à todos.

Divulgamos novos artigos nas redes sociais, basta clicar nos ícones abaixo.

Excel não precisa ser complicado

Assine nossa newsletter e receba dicas práticas para dominar o excel