Foros del Web » Soporte técnico » Ofimática »

macro sudoku!!!

Estas en el tema de macro sudoku!!! en el foro de Ofimática en Foros del Web. hola!!! necesito una ayudita con una macro que he hecho para resolver sudokus. no tengo mucha idea de visual basic, pero he conseguido que la ...
  #1 (permalink)  
Antiguo 31/05/2011, 07:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 1
Antigüedad: 12 años, 10 meses
Puntos: 0
macro sudoku!!!

hola!!! necesito una ayudita con una macro que he hecho para resolver sudokus. no tengo mucha idea de visual basic, pero he conseguido que la macro resuelva sudokus muy muy sencillos, simplemente revisando los valores en filas y columnas, el problema está en la parte en que debe ver los valores que hay en los cuadrantes.
he creado una matriz 9x9 que va recorriendo casilla a casilla, para cada casilla o posicion de la matriz (i,j) comprueba los valores que hay en su correspondiente columna y fila y los convierte en cero en un vector llamado posibles(1,2,3,4,5,6,7,8,9). hasta ahi bien, pero en los bucles correspondientes a cada cuadrante debe haber un error xq el programa se bloquea y he de reiniciarlo. Os dejo esa parte del código a ver si me podeis echar una mano. Gracias!

'Bucle para resolver el sudoku. Recorro la matriz casilla a casilla siempre que el totalnumeros sea menos de 81

Do While totalnumeros < 81
'Doy los valores al vector q lleva todos los numeros posibles
posibles(1) = "1"
posibles(2) = "2"
posibles(3) = "3"
posibles(4) = "4"
posibles(5) = "5"
posibles(6) = "6"
posibles(7) = "7"
posibles(8) = "8"
posibles(9) = "9"

For i = 3 To 11
For j = 3 To 11

If Matriz(i, j) = 9 Or Matriz(i, j) = 8 Or Matriz(i, j) = 7 Or Matriz(i, j) = 6 Or Matriz(i, j) = 5 Or Matriz(i, j) = 4 Or Matriz(i, j) = 3 Or Matriz(i, j) = 2 Or Matriz(i, j) = 1 Or Matriz(i, j) = 0 Then

'Para cada casilla=0 comparo con los valores de la fila, columna y cuadrante

If Matriz(i, j) = 0 Then

'Valores de la fila
For y = 3 To 11
If Matriz(i, y) <> 0 Then
numeroposible = Matriz(i, y)
posibles(numeroposible) = "0"
'Range("B13:J13").Value = posibles
End If
Next y

'Valores de la columna
For x = 3 To 11
If Matriz(x, j) <> 0 Then
numeroposible = Matriz(x, j)
posibles(numeroposible) = "0"
End If
Next x

'Valores del cuadrante
Do While i >= 3 And i <= 5 And j >= 3 And j <= 5 'Primer cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i >= 6 And i <= 8 And j >= 3 And j <= 5 'Segundo cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i >= 9 And i <= 11 And j >= 3 And j <= 5 'Tercer cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i >= 3 And i <= 5 And j >= 6 And j <= 8 'Cuarto cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i <= 6 And i <= 8 And j >= 6 And j <= 8 'Quinto cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i >= 9 And i <= 11 And j >= 3 And j <= 5 'Sexto cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i >= 3 And i <= 5 And j >= 9 And j <= 11 'Séptimo cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i >= 6 And i <= 8 And j >= 9 And j <= 11 'Octavo cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop

Do While i >= 9 And i <= 11 And j >= 9 And j <= 11 'Noveno cuadrante
For x = 3 To 5
For y = 3 To 5
If Matriz(x, y) <> 0 Then
numeroposible = Matriz(x, y)
posibles(numeroposible) = "0"
End If
Next y
Next x
Loop
'Compruebo si sólo queda un número en el vector y lo pongo en la casilla
contar = 0
For z = 1 To 9
If posibles(z) <> 0 Then
numerofinal = posibles(z)
contar = contar + 1
End If
Next z
If contar = 1 Then
Matriz(i, j) = numerofinal
totalnumeros = totalnumeros + 1
End If
End If


End If


Next j
Next i


Loop

Etiquetas: macro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:55.