ik doe nog enkel aan snellezen.
1. ik zou de 1e 2 keer de macro de beide diagonalen laten aflopen ipv. per rij of kolom te laten werken.
Nadat je de macro zo had laten lopen, dan heb je het ganse raster al 2 keer afgelopen, dus maak je snellere vooruitgang.
Daarna kan je of eerst nog een keer de 2 middellijnen doen en dan terug rij per rij of kolom per kolom afwerken of een andere methode, die geoefende sudoku-oplossers je aan de hand kunnen doen.
2. maak een geparametreerde macro, dus een macro waarin je iets kan meegeven, bv. een bereik, want in principe moet je dezelfde redenening 3 keer net eventjes anders uitvoeren. Je zoekt singles of duo's en straks nog andere dingen binnen voor jou een raster van 3*27, 27*3 of 9*9, dus geef je zo'n bereik aan die ene macro mee en die lost de boel op en geeft het antwoord terug. Vermoedelijk moet je dan nog een 2e parameter meegeven, maar daar kom je wel achter.
Met de helft minder regels ga je een duidelijker beeld krijgen.
zie hier onder :
de macro "loopje" maak je een bepaalde zoekstrategie, die je proefondervindelijk zou kunnen optimaliseren. Ik zeg niet dat de geciteerde manier van eerst zoeken op diagonaal sneller oplost, maar ik gok het en je zou het kunnen testen.
De macro "opzoeken" dat dan binnen dat bereik je zoek en oploswerk.
En die resize, als je die nog niet kent, dat is een "wijze" zouden ze in het gents zeggen.
Onderstaande is opnieuw los uit de pols geschreven, zonder testen ...
Sub Loopje()
For i = 1 To 25 Step 3'1e diagonaal
opzoeken Cells(i, i).Resize(9, 9) 'deelraster
opzoeken Cells(i, 1).Resize(3, 27) 'rij
opzoeken Cells(1, i).Resize(27, 3) 'kolom
Next
For i = 1 To 25 Step 3'2e diagonaal
j = 26 - i
opzoeken Cells(i, j).Resize(9, 9)
opzoeken Cells(i, 1).Resize(3, 27)
opzoeken Cells(1, j).Resize(27, 3)
Next
For i = 1 To 25 Step 3
For j = 1 To 25 Step 3
opzoeken Cells(i, j).Resize(9, 9)
opzoeken Cells(i, 1).Resize(3, 27)
opzoeken Cells(1, j).Resize(27, 3)
Next
Next
End Sub
Sub opzoeken(bereik)
Select Case bereik.Rows.Count * 100 + bereik.Columns.Count
Case 327: s = "bezig met een rij"
Case 2703: s = "bezig met een kolom"
Case 909: s = "bezig met een deelraster"
End Select
bereik.Select
MsgBox "het bereik is " & bereik.Address & vblf & s
End Sub