Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1000to1004
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

Makro läuft nicht

Makro läuft nicht
11.08.2008 17:39:00
alifa
Hallo VBA Gemeinde,
obwohl nur zehn Ziffern, kommt die Meldung: Überlauf. Habe schon alles versucht, Currency, Double. Long hört bei mir bei 2147483467 auf. Decimal nimmt er irgendwie nicht an. Kann jemand helfen?

Sub Alifa()
Dim a(0 To 9) As Byte, i As Byte, t As Single
For i = 0 To 9
a(i) = i
Next i
t = Timer
Call Permutation(a, 0, 9)
MsgBox "Fertig nach " & Round(Timer - t, 1) & " Sekunden"
End Sub



Sub Permutation(ByVal a, k As Byte, n As Byte)
Dim i As Byte, x As Byte
If k = n Then
Call Auswerten(a)
Else
For i = k To n
x = a(i)
a(i) = a(k)
a(k) = x
Call Permutation(a, k + 1, n)
Next
End If
End Sub



Sub Auswerten(ByVal a)
Dim w As Double
w = (a(0) & a(1) & a(2) & a(3) & a(4) & a(5) & a(6) & a(7) & a(8) & a(9))
If w Mod 7 = 0 And _
Mid(w, 1, 8) Mod 7 = 0 Or Mid(w, 2, 8) Mod 7 = 0 And Mid(w, 1, 7) Mod 7 = 0 Or _
Mid(w, 2, 7) Mod 7 = 0 Or Mid(w, 3, 7) Mod 7 = 0 And Mid(w, 1, 6) Mod 7 = 0 Or _
Mid(w, 2, 6) Mod 7 = 0 Or Mid(w, 3, 6) Mod 7 = 0 Or Mid(w, 4, 6) Mod 7 = 0 And _
Mid(w, 1, 5) Mod 7 = 0 Or Mid(w, 2, 5) Mod 7 = 0 Or Mid(w, 3, 5) Mod 7 = 0 Or _
Mid(w, 4, 5) Mod 7 = 0 Or Mid(w, 5, 5) Mod 7 = 0 And Mid(w, 1, 4) Mod 7 = 0 Or _
Mid(w, 2, 4) Mod 7 = 0 Or Mid(w, 3, 4) Mod 7 = 0 Or Mid(w, 4, 4) Mod 7 = 0 Or _
Mid(w, 5, 4) Mod 7 = 0 Or Mid(w, 6, 4) Mod 7 = 0 And Mid(w, 1, 3) Mod 7 = 0 Or _
Mid(w, 2, 3) Mod 7 = 0 Or Mid(w, 3, 3) Mod 7 = 0 Or Mid(w, 4, 3) Mod 7 = 0 Or _
Mid(w, 5, 3) Mod 7 = 0 Or Mid(w, 6, 3) Mod 7 = 0 And _
Mid(w, 7, 3) Mod 7 = 0 Then
Cells(r + 1, 1) = a(0) & a(1) & a(2) & a(3) & a(4) & a(5) & a(6) & a(7) _
& a(8) & a(9)
r = r + 1
End If
End Sub


kurz das Problem. Gesucht eine zehn- stellige Zahl, die alle Ziffern von 0 bis 9 genau einmal beinhaltet. Aus dieser Zahl sollen 2,3,4,5,6,7,8,9-stellige Zahlen(zusammenhängend) gebildet werden können. Alle teilbar durch 7.
Gruß, alifa

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro läuft nicht
11.08.2008 18:17:00
Daniel
hi
1. Frage: Variable r ist nicht dimensoniert, wie sollte diese dimensioniert sein?
2. Frage: du arbeitest offensichtlich nicht mit Option Explicit, das erhöht die Fehlermöglichkeit durch falsche Variabelnbezeichnungen die nicht erkannt werden.
3. Welche Variable erzeugt den Überlauf, in welcher Zeile passiert der Fehler?
Egal wie du R dimensionerst (wahrscheinlich Global als LONG)
mehr als 65536 Permutationen kannst du nicht auf einem Blatt anzeigen, weil du nicht mehr Zeilen zur verfügung hast.
alleine schon durch bei den 10-Stelligen Zahlen hast du 518.400 - Permutationmöglichkeiten (Fakultät(10) / 7)
da musst du entwerder auf Excel 2007 warten oder dir noch was einfallen lassen, wie du das darstellen wills(
(z.B. wenn R > max Zeilenzahl, dann Spalte um 1 erhöhen und R wieder auf 1 setzen)
Gruß, Daniel

Anzeige
AW: Makro läuft nicht
11.08.2008 23:08:21
alifa
Hallo Daniel,
1. Die Zeilenzahl ist hier nicht das Problem. Es gibt wahrscheinlich nur eine einzige Lösung für mein Problem.
2. Das stimmt. die Variabeln werden so als Variant dimensioniert.
3. Die Varible w erzeugt den Überlauf, die zehnstellige Zahl also.
Ein zusätzliche Frage meinerseits: Kann das "Or" in einer If...Then Schleife so wie ich das gemacht habe bestehen? Ich hatte einen Versuch gemacht mit 9 Zahlen. Da schien das "Or" nicht wirksam zu sein. Es gab ein Resultat, das aber nicht stimmte. Meine zehnstellige Zahl soll auch eine 6-stellige beinhalten, die durch 7 teilbar ist. Bei der 3-stelligen, z.B gibt es mehrere Möglichkeiten. (Bei den anderen natürlich auch) Die habe ich im Makro mit dem "Or" gemeint.
Dort kann ich keinesfalls "And" anwenden.
Gruß, Alifa

Anzeige
AW: Makro läuft nicht
11.08.2008 18:44:39
Jürgen
Hallo Alifa,
Daniel hat Dich schon auf einige Punkte aufmerksam gemacht. Wenn Du in der Onlinehilfe nach dem Decimal-Datentyp nachschlägst, findest Du den Hinweis, dass man keine Variable als Decimal deklarieren kann, sonden sie als variant deklariert und mit CDec() eine Decimal-Untertypen erzeugt, also z.B. so:
Dim w As Variant
w = CDec(a(0) & a(1) & a(2) & a(3) & a(4) & a(5) & a(6) & a(7) & a(8) & a(9))
So hast Du zwar eine ausreichend dimensionierte Variable - unglücklicherweise kommt aber Mod damit nicht zurecht. Und da w (nebenbei: sprechende Variablennamen helfen Dir, auch in drei Monaten noch Deienn Code zu verstehen...) im folgenden mittels Mid() nur als String ausgewertet wird (hier rettet Dich übrigens nur die automatische Typkonvertierung von Excel - mit den entsprechenden Performanceverlusten), könnte Dein Code so aussehen:
Dim w as String
w = a(0) & a(1) & a(2) & a(3) & a(4) & a(5) & a(6) & a(7) & a(8) & a(9)
If Int(CDec(w) / 7) = CDec(w) / 7 and _
....
Gruß, Jürgen

Anzeige
AW: Makro läuft nicht
12.08.2008 09:33:00
alifa
Hallo Jürgen,
ja, jetzt gibt es keinen Überlauf mehr, doch in einer viertel Stunde ein falsches Ergebnis: 9876543210. Ist nicht teilbar durch 7. Die Zahlen 21, 987, 5432, 87654 sind teilbar, doch man findet keine 6-stellige durch 7 teilbare Zahl, auch keine mögliche Neunstellige. Woran liegt es, ich komm nicht drauf.

AW: Makro läuft nicht
13.08.2008 00:56:00
Jürgen
Hallo Alifa,
ohne bislang bis ins Letzte verstanden zu haben, wie Dein Lösungsweg funktioniert (dafür ist die Nacht zu fportgeschritten...), vermute ich, dass Du nicht bedacht hast, dass ein "and" stärker bindet als ein "or" (analog "Punkt- vor Strichrechnung"). Setze also entsprechende Klammern, um die gewünschte Logik zu erreichen. Statt
Ausdruck1 or Ausdruck2 and Ausdruck3
was "Ausdruck1 or (Ausdruck2 and Ausdruck3)" enspricht, also
(Ausdruck1 or Ausdruck2) and Ausdruck3
Gruß, Jürgen

Anzeige
AW: Makro läuft nicht
13.08.2008 14:45:15
alifa
Hallo Jürgen,
ich glaube, dass es für dieses Problem keine Lösung gibt. Wenn ich die Achtziffrige ausklammere, dann kommt die Zahl 7945063812., die durch 7 teilbar ist. Daraus kann man Zahlen bilden, die durch 7 restlos teilbar sind.
7, 63, 945, 7945, 79450, 945063, 7945063, 945063812. Nur keine 8-stellige.
Mein Makro macht alle Permutationen der Ziffern 0 bis 9. und bildet 10 stellige Zahlen. Diese werden dann geprüft, ob die darin enthaltenen weniger Ziffern enthaltenden Zahlen auch durch 7 teilbar sind. Die Zehnstellige muss auch teilbar sein. Vielleicht kann ein anders aufgebautes Makro dies nachvollziehen.
Ich habe das Makro umgeschrieben, es gibt kein "Or" mehr. ZB. w3=a(1) & a(2) & a(3)
w3=a(2) & a(3) & a(3)
w3=a(3) & a(4) & a(5)......
w3=a(7) & a(8) & a(9)
So habe ich alle möglichen Zahlen definiert und dann: If w3 Mod 7=0 Then....
Gruß, Alifa
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige