Sudoku
#1
Hallo, ich habe eine weitere Version geschaffen um Sudokus mit Excel und VBA nicht nur zu lösen, sondern auch die Lösungsschritte und auch die Programmierung zu verstehen. Allerdings wird der Code manchem Profi eine Gänsehaut verursachen. Dennoch wäre eure Meinung - oder Verbesserung - für mich von Interesse.


Angehängte Dateien
.xlsm   Sudoku.xlsm (Größe: 2 MB / Downloads: 19)
Top
#2
Hallöchen,

das ist ja schon relativ dicht programmiert.
Mal so auf den ersten Blick ein paar Hinweise.

Auf jeden Fall würde ich erst mal oben Option Explicit schreiben. Eventuelle Schreibfehler bei Variablen findest DU so schneller ...

**********************************
Einige Select kannst Du Dir sparen, nutze z.B. für die Anzeige weiterer Bereiche definierte Ansichten, z.B. die Makroliste …

Oder hierbei, wenn Du den Bereich an das Sub übergibst, also statt:

Range(Cells(Z, 30), Cells(Z + 2, 56)).Select
Call Uebergabe 'Aufruf der Sub Uebergabe (Gefundene Zahl nach links ?bertragen)

dann

Uebergabe Range(Cells(Z, 30), Cells(Z + 2, 56))

und im Sub dann

Sub Uebergabe(byref rngChange as range)

For For Each C In rngChange
..

**********************************
Bei den If's kannst Du auch Else nutzten, z.B. statt

If ?berschrift <> "" Then Range("C1") = ?berschrift
If ?berschrift = "" Then Range("C1") = "Zeile " & (ActiveSheet.Cells(Rows.Count, 300).End(xlUp).Row) + 1

dann z.B.

If ?berschrift <> "" Then Range("C1") = ?berschrift Else Range("C1") = "Zeile " & (ActiveSheet.Cells(Rows.Count, 300).End(xlUp).Row) + 1

Oder in mehreren Zeilen

If … Then
Else
End IF

--> so was ist für mich übrigens auch ein Grund, auf die deutschen Umlaute zumindest bei Codes zu verzichten

**********************************
Du kannst auch If's schachteln und dadurch auf Sprünge verzichten,

also statt

If Range("C1") <> "" Then GoTo ab_in_Biblio

dann
Code:
If Range("C1") = "" Then
  If … Then
  End If
End If

**********************************
Schleifen sind auch nicht immer nötig und manche Sachen bringt VBA auch ohne WSFunction, z.B.

Code:
For Each zelle In Range("A2", "AB28") 'ggf. vorhandene Leerzeichen l?schen
        zelle.Value = WorksheetFunction.Trim(zelle.Value)
Next zelle

Hier reicht ggf.

Range("B8:AB28").Replace What:=" ", Replacement:=""



---> Range("A2", "AB28") das hab ich dabei auch gleich mal geändert...

**********************************
Die Funktion hab ich mir jetzt noch nicht angescheut Smile bin nicht so der SoDoku-Fan oder anders gesagt - hab ich noch nie gemacht Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Verzichte auf 'merged cells'
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#4
Hallo

das ist ein alter Thread, aber ich möchte eine Beispiel Lösung anhängen wie man Sudoku Ohne verbundene Zellen entwickeln kann.
Habe auch nur heute Internet Zugang, kann mich danach lange Zeit nicht mehr melden!

Mein Programm basiert auf der Idee mit WorsheetFunction, aber ohne das Selektieren in eier 2. Tabelle. Die Auswertung der Zellen mit Mehrfach Zahlenkomination habe ich durch ein Komma getrennt.

mfg Gast 123

PS  Herzliche Grüsse an die Kollegen, bin wegen Corona noch in Deutschland, aber in einem kleinen Dorf ohne Internet.


Angehängte Dateien
.xls   Sudoku neu 2.xls (Größe: 1,19 MB / Downloads: 6)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste