Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
812to816
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
812to816
812to816
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Sudoku-Lösung in VBA

Sudoku-Lösung in VBA
01.11.2006 20:51:15
PeterG
Liebe VBA-Spezies,
ich wende mich an alle, die sich sowohl für VBA als auch Sudoku interessieren. Dazu hat jetzt ja gerade HWH ein VBA-Programm veröffentlicht, das sich ganz genial die Aufgaben gleich mit Lösung aus dem Internet lädt (m.E. VBA-Lehrcode der besonderen Art). Meine diesbezüglichen Versuche sind bisher gescheitert. Ich hatte allerdings auch den Anspruch, die Lösung in VBA zu errechnen. Das war wahrscheinlich etwas blauäugig. Der Versuch wie beim Schach rekursiv zu Ergebnissen zu kommen, scheiterte nach Sekunden mit der Meldung "zu wenig Stapelspeicherplatz". Aber möglicherweise war da schon jemand erfolgreicher oder hat den einen oder anderen Tipp. Danke für jede Antwort.
Viele Grüße
PeterG

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sudoku-Lösung in VBA
01.11.2006 22:56:59
Reinhard
Hi Peter,
was issen HWH? an dem Runterladcode wäre ich interessiert, jetzt nicht wegen Sudoku, sondern wegen den Codeteilen fürs Auslesen.
Nachstehenden Code, ist ein Posting was ich hier absetzte, habe ich mal gebastelt, vielleicht nützt er dir was. Andrerseits hat doch Hans hier, irgendwo oben links, was von Sudoku stehen gehabt, da konnte man sich eine datei runterladen die Sudokus löst usw. Die war viel besser als mein Gestümpere. Bei Interesse schau ich aml ob ich sie finde.
Gruß
Reinhard
Hallo,
wenn man Sudokus löst und auf einmal festhängt kann es ja hilfreich sein, die bisherigen gefundenen Zahlen anhand der Lösung zu prüfen ob denn da nicht schon ein Fehler ist und das ggfs. korigieren.
Ich habe das Makro an ca. 30 Sudokus getestet und es funktionierte perfekt, was natürlich kein Beweis ist dass es alle Sudokus lösen kann und mir ist auch sehr unklar geblieben ob es für ein Sudoku mehrere Lösungen geben könnte.
Das Makro erwartet die Sudoku Zahlen in Tabelle1 im Bereich "A1:I9" und präsentiert die Lösung in Tabelle2 "A1:I9".
Gruß
Reinhard

Option Explicit
Sub sudo()
Dim ws1 As Worksheet, z As Byte, s As Byte, m(9, 9) As String, n As Byte
Dim zq As Byte, sq As Byte, Zelle, Wert As String, neu As Boolean
On Error Resume Next 'wegen Fehler bei CountIf wenn nichts gefunden wird
Set ws1 = Worksheets("Tabelle1")
With Worksheets("Tabelle2")
ws1.Range("A1:I9").Copy Destination:=.Range("A1")
For z = 1 To 9
For s = 1 To 9
If .Cells(z, s) = "" Then
m(z, s) = "123456789"
Else
m(z, s) = .Cells(z, s)
End If
Next s
Next z
End With
nochmal:
With Worksheets("Tabelle2")
For z = 1 To 9 'waagrechte Prüfung
For s = 1 To 9
If Len(.Cells(z, s)) <> 1 Then
For n = 1 To 9
If Application.WorksheetFunction.CountIf(.Range(.Cells(z, 1), .Cells(z, 9)), CStr(n)) > 0 Then
m(z, s) = Replace(m(z, s), CStr(n), "")
If Len(m(z, s)) = 1 Then
.Cells(z, s) = m(z, s)
GoTo nochmal
End If
End If
Next n
End If
Next s
Next z
For s = 1 To 9 'senkrechte Prüfung
For z = 1 To 9
If Len(m(z, s)) > 1 Then
For n = 1 To 9
If Application.WorksheetFunction.CountIf(.Range(.Cells(1, s), .Cells(9, s)), CStr(n)) > 0 Then
m(z, s) = Replace(m(z, s), CStr(n), "")
If Len(m(z, s)) = 1 Then
.Cells(z, s) = m(z, s)
GoTo nochmal
End If
End If
Next n
Else
m(z, s) = .Cells(z, s)
End If
Next z
Next s
For z = 1 To 9 'quadratische Prüfung
For s = 1 To 9
zq = Int((z - 1) / 3) * 3 + 1
sq = Int((s - 1) / 3) * 3 + 1
If Len(m(z, s)) > 1 Then
For n = 1 To 9
If Application.WorksheetFunction.CountIf(.Range(.Cells(zq, sq), .Cells(zq, sq).Offset(2, 2)), CStr(n)) > 0 Then
m(z, s) = Replace(m(z, s), CStr(n), "")
If Len(m(z, s)) = 1 Then
.Cells(z, s) = m(z, s)
GoTo nochmal
End If
End If
Next n
End If
Next s
Next z
For z = 1 To 9
For s = 1 To 9
.Cells(z, s) = m(z, s)
Next s
Next z
For z = 1 To 9 Step 3 'quadratische Prüfung auf einmalige Ziffer
For s = 1 To 9 Step 3
Wert = ""
For Each Zelle In .Range(.Cells(z, s), .Cells(z, s).Offset(2, 2))
Wert = Wert & CStr(Zelle.Value)
Next Zelle
For Each Zelle In .Range(.Cells(z, s), .Cells(z, s).Offset(2, 2))
If Len(Zelle) > 1 Then
For n = 1 To Len(Zelle)
If InStr(InStr(Wert, Mid(Zelle, n, 1)) + 1, Wert, Mid(Zelle, n, 1)) = 0 Then
Zelle.Value = Mid(Zelle, n, 1)
m(Zelle.Row, Zelle.Column) = Zelle.Value
neu = True
GoTo weiter
End If
Next n
End If
Next Zelle
weiter:
Next s
Next z
If neu = True Then
neu = False
For Each Zelle In .Range("A1:I9")
If Len(Zelle) > 1 Then Zelle.Value = ""
Next Zelle
GoTo nochmal
End If
ws1.Range("A1:I9").Copy Destination:=.Range("A11")
.Activate
End With
End Sub
Function doppelt(ByVal Wert)
Dim n
With Worksheets("Tabelle2")
doppelt = False
For n = 1 To Len(Wert)
If InStr(InStr(Wert, n) + 1, Wert, n) <> 0 Then
doppelt = True
Exit For
End If
Next n
End With
End Function

Anzeige
HWH = Hans W. Herber ...
01.11.2006 23:03:14
da
axo :-) sorry, das W kannte ich nicht o.w.T.
01.11.2006 23:14:21
Reinhard

Gruß Reinhard ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: HWH = Hans W. Herber ...
01.11.2006 23:41:45
PeterG
Hallo Reinhard,
danke für deine Antwort. Deinen Code habe ich jetzt noch nicht getestet, kommt aber. Den Sudoku-Code von Hans W. Herber kannst du auf der Forum-Seite oben links unter "New ..." downloaden. Es lohnt sich!
Gruß
PeterG
AW: HWH = Hans W. Herber ...
02.11.2006 00:07:23
Reinhard
Moin Peter,
vergiss meinen Code :-)
Den von Hans hab ich nur kurz getestet und überflogen, war jetzt vba-technisch nix unbekanntes dabei. Aber die wahre Seele ist die dahintersteckende Logik wie man so ein Rätsel angeht. Das muss ich noch eruieren um zu lernen, ist ja letztlich die Problematik aus zig Kombinationsmöglichkeiten sehr schnell die richtigen zu finden und diese auszuwerten.
Gruß
Reinhard
Anzeige
AW: HWH = Hans W. Herber ...
02.11.2006 06:23:10
Luschi
Hallo Reinhard,
habe mir den Vba-Code und die Tabellen [besonders die versteckte Tabelle ("Aufgaben")] mal genauer angesehen.
Der Witz dabei ist, daß in den Sudoku-Aufgaben bereits alle Zahlen vorhanden sind.
Es sind aber alle Zahlen, die zu erraten sein sollen, mit dem Zahlenformat unsichtbar (";;;") formatiert.
Mit dem Drücken des Buttons "Alle prüfen" wird also nicht die Zahl berechnet, sondern nur mit der bereits vorhandenen Zahl in der Tabelle "Aufgaben" verglichen.
Etwas interessanter ist da schon der Vba-Code beim Drücken der rechten Maustaste auf ein Zahlenfeld, um die Zahlen anzuzeigen, die für dieses Feld noch in Frage kommen.
Insgesamt ist dieses Programm aber nicht geeignet, Sudoku-Aufgaben aus Zeitungen etc. zu lösen, da die Logik fehlt, fehlende Zahlen zu berechnen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: HWH = Hans W. Herber ...
01.11.2006 23:42:10
PeterG
Hallo Reinhard,
danke für deine Antwort. Deinen Code habe ich jetzt noch nicht getestet, kommt aber. Den Sudoku-Code von Hans W. Herber kannst du auf der Forum-Seite oben links unter "New ..." downloaden. Es lohnt sich!
Gruß
PeterG
AW: HWH = Hans W. Herber ...
01.11.2006 23:42:58
PeterG
Hallo Reinhard,
danke für deine Antwort. Deinen Code habe ich jetzt noch nicht getestet, kommt aber. Den Sudoku-Code von Hans W. Herber kannst du auf der Forum-Seite oben links unter "New ..." downloaden. Es lohnt sich!
Gruß
PeterG
AW: HWH = Hans W. Herber ...
01.11.2006 23:43:10
PeterG
Hallo Reinhard,
danke für deine Antwort. Deinen Code habe ich jetzt noch nicht getestet, kommt aber. Den Sudoku-Code von Hans W. Herber kannst du auf der Forum-Seite oben links unter "New ..." downloaden. Es lohnt sich!
Gruß
PeterG
Anzeige
Herzlichen Dank
02.11.2006 10:19:51
PeterG
Hallo Rudi,
genau das war's. Die Workbook von Andy Pope löst nicht nur Sudoku's. Sie generiert auch neue. Das ist VBA vom Feinsten. Herzlichen Dank für diesen Tipp.
PeterG

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge