Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1108to1112
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
Inhaltsverzeichnis

Fehler im Makro

Fehler im Makro
alifa
Hallo,
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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Fehler im Makro
15.10.2009 14:38:47
effha
Hallo alifa,
auf den ersten blick fällt mir auf, dass im Code
ReDim a(k - 1)
steht.
Da k zu diesem zeitpunk den Wert 5 hat, kannst Du später nicht auf das Array a mit dem index > als 4 zugreifen:
And a(11) + a(12) + a(13) + a(14) + a(15) = 42 And a(16) + a(17) + a(18) + a(19) + a
AW: Fehler im Makro
16.10.2009 10:22:16
alifa
Ich glaube, ich habe das falsch angepackt! Eigentlich müsste man das mit zweidimensionalem Datenfeld(Array)lösen. Aber davon habe ich zu wenig Ahnung. Würde mich freuen, wenn...
Gruß, Erhard
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige