dieses Makro soll ein magisches Quadrat 5x5 berechnen und jeweils ein Magisches ausdrucken. Es soll mehrere Lösungen geben. Ich stoße da an meine Grenzen. Kann mir jemand helfen?
Gruß, Erhard
Sub Magisch4()
Dim i As Long, u As Double, lngR As Long
Dim n As Byte, k As Byte, j As Byte
Dim a, t!
t = Timer
'Einträge:
a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 29, 0, 0, 0, 0, _
_
0)
k = 5
n = UBound(a) + 1
If k > n Then MsgBox "k > n", 16: Exit Sub
With Application
u = .Fact(n) / (.Fact(k) * .Fact(n - k))
End With
If u > Rows.Count Then MsgBox u & " > " & Rows.Count, 16: Exit Sub
ReDim a(k - 1)
ReDim bPos(k - 1) As Byte
For i = 1 To k
bPos(i - 1) = i
Next
Application.ScreenUpdating = False
With ActiveSheet
.Cells.Delete
For i = 1 To u
For j = 0 To UBound(bPos)
a(j) = a(bPos(j) - 1)
Next
If a(1) + a(2) + a(3) + a(4) + a(5) = 42 And a(6) + a(7) + a(8) + a(9) + a(10) = 42 _
And a(11) + a(12) + a(13) + a(14) + a(15) = 42 And a(16) + a(17) + a(18) + a(19) + a( _
_
20) = 42 _
And a(21) + a(22) + a(23) + a(24) + a(25) = 42 And a(1) + a(2) + a(3) + a(4) + a(5) = _
_
42 And _
a(1) + a(7) + a(13) + a(19) + a(25) = 42 And a(21) + a(17) + a(13) + a(9) + a(5) = 42 _
_
Then
lngR = lngR + 1
.Range(.Cells(lngR, 1), .Cells(lngR, k)).Value = a
End If
Call GetComb(n, k, bPos)
Next
End With
Application.ScreenUpdating = True
MsgBox "fertig in " & Round(Timer - t, 2) & " Sek "
End Sub
Sub GetComb(ByVal n As Byte, ByVal k As Byte, bPos() As Byte)
Dim i As Byte, j As Byte
i = k - 1
Do While bPos(i) >= n - k + i + 1
If i = 0 Then Exit Do
i = i - 1
Loop
bPos(i) = bPos(i) + 1
For j = i To k - 1
bPos(j) = bPos(i) + j - i
Next
End Sub