Makro: Schleife, laufende Variablen ausgeben
Verfasst: Mo, 13.08.2012 13:35
Hallo Leute,
wie ihr sehen könnt bin ich neu hier und erfülle womöglich einige Standard-Klischees, dennoch hoffe ich, von euch eien Lösung für mein Problem zu bekommen. Ich bin seit ein paar Tagen dabei ein Rätsel zu lösen, scheitere jedoch an meinen Programmierfähigkeiten und der Tatsache mir entsprechende Informationen zusammenzusuchen. Daher wende ich mich an euch.
Es geht darum folgende Gleichung mit 10 Variablen, welche jeweils ganzzahlig von 0 bis 9 laufen können, zu lösen:
(10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) = 1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j
Da ich mich mit Programmiersprachen nicht auskenne, kam mir die Idee ein Makro zu schreiben. Bei meinen bisherigen Versuchen scheiterte ich mit dem Ansatz, während dem Makrodurchlauf die 10 Tabelleneinträge der Variablen mitvariieren zu lassen und anhalten zu lassen wenn passende Werte gefunden wurden (durch die hohe Belastung, die mir bei 10^10 Möglichkeiten durchaus bewusst ist (mit gewissen weiteren Einschränkungen habe ich die Möglichkeiten immerhin auf rund 10^7 verringern können), übersprang es anscheinend die richtigen Werte. In einem zweiten Versuch die Werte in den Tabellen nicht mitzuändern, lief es gefühltermaßen schneller und endete mit einem Teilerfolg. Ich konnte das Makro derart konstruieren, dass ich mir mittels Msgbox anzeigen lassen kann, dass es eine Lösung gibt, allerdings passende Werte nicht angezeigt werden und ich somit weiterhin bei 0 stehe.
Um voran zu kommen zeige ich euch mal das Makro, wie ich es aus meinen bisherigen Versuchen konstruiert habe:
Sub Finde_Kombination()
For a = 0 To 9
For b = 0 To 9
For c = 0 To 9
For d = 0 To 9
For e = 0 To 9
For f = 0 To 9
For g = 0 To 9
For h = 0 To 9
For i = 0 To 9
For j = 0 To 9
Dieser Teil war vorher drin Anfang
With ThisComponent.Sheets().GetByName("Tabelle1")
.getCellByPosition(1, 1).Value = a 'A2
.getCellByPosition(2, 1).Value = b 'B2
.getCellByPosition(3, 1).Value = c 'C2
.getCellByPosition(4, 1).Value = d 'D2
.getCellByPosition(5, 1).Value = e 'E2
.getCellByPosition(6, 1).Value = f 'F2
.getCellByPosition(7, 1).Value = g 'G2
.getCellByPosition(8, 1).Value = h 'H2
.getCellByPosition(9, 1).Value = i 'I2
.getCellByPosition(10, 1).Value = j 'J2
Das war vorher drin Ende
If (10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) - (1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j) = 0 Then
Msgbox "Passende Werte gefunden"
Exit Sub
End If
End With
Next j
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
End Sub
Es ist nicht viel, aber leider bin ich nicht weitergekommen und weiß mir im Moment nicht anders zu helfen als euch zu fragen.
Sofern das Makro richtig geschrieben ist (hier wäre ich über eine Bestätigung oder Verbesserung dankbar), würde ich gerne wissen, wie ich mir die Werte der laufenden Variablen in der Messagebox ausgeben bzw anzeigen lassen kann. Ich hoffe so dann das Problem lösen zu können.
Falls ihr einen schnelleren Weg kennt an die Werte der Variablen zu kommen, wäre ich euch dankbar mir da weiterhelfen zu können (im Optimalfall ein fertiges Script oder die gesuchten Werte).
Ich hoffe ihr könnt mir weiterhelfen,
lg Roy
wie ihr sehen könnt bin ich neu hier und erfülle womöglich einige Standard-Klischees, dennoch hoffe ich, von euch eien Lösung für mein Problem zu bekommen. Ich bin seit ein paar Tagen dabei ein Rätsel zu lösen, scheitere jedoch an meinen Programmierfähigkeiten und der Tatsache mir entsprechende Informationen zusammenzusuchen. Daher wende ich mich an euch.
Es geht darum folgende Gleichung mit 10 Variablen, welche jeweils ganzzahlig von 0 bis 9 laufen können, zu lösen:
(10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) = 1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j
Da ich mich mit Programmiersprachen nicht auskenne, kam mir die Idee ein Makro zu schreiben. Bei meinen bisherigen Versuchen scheiterte ich mit dem Ansatz, während dem Makrodurchlauf die 10 Tabelleneinträge der Variablen mitvariieren zu lassen und anhalten zu lassen wenn passende Werte gefunden wurden (durch die hohe Belastung, die mir bei 10^10 Möglichkeiten durchaus bewusst ist (mit gewissen weiteren Einschränkungen habe ich die Möglichkeiten immerhin auf rund 10^7 verringern können), übersprang es anscheinend die richtigen Werte. In einem zweiten Versuch die Werte in den Tabellen nicht mitzuändern, lief es gefühltermaßen schneller und endete mit einem Teilerfolg. Ich konnte das Makro derart konstruieren, dass ich mir mittels Msgbox anzeigen lassen kann, dass es eine Lösung gibt, allerdings passende Werte nicht angezeigt werden und ich somit weiterhin bei 0 stehe.
Um voran zu kommen zeige ich euch mal das Makro, wie ich es aus meinen bisherigen Versuchen konstruiert habe:
Sub Finde_Kombination()
For a = 0 To 9
For b = 0 To 9
For c = 0 To 9
For d = 0 To 9
For e = 0 To 9
For f = 0 To 9
For g = 0 To 9
For h = 0 To 9
For i = 0 To 9
For j = 0 To 9
Dieser Teil war vorher drin Anfang
With ThisComponent.Sheets().GetByName("Tabelle1")
.getCellByPosition(1, 1).Value = a 'A2
.getCellByPosition(2, 1).Value = b 'B2
.getCellByPosition(3, 1).Value = c 'C2
.getCellByPosition(4, 1).Value = d 'D2
.getCellByPosition(5, 1).Value = e 'E2
.getCellByPosition(6, 1).Value = f 'F2
.getCellByPosition(7, 1).Value = g 'G2
.getCellByPosition(8, 1).Value = h 'H2
.getCellByPosition(9, 1).Value = i 'I2
.getCellByPosition(10, 1).Value = j 'J2
Das war vorher drin Ende
If (10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) - (1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j) = 0 Then
Msgbox "Passende Werte gefunden"
Exit Sub
End If
End With
Next j
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
End Sub
Es ist nicht viel, aber leider bin ich nicht weitergekommen und weiß mir im Moment nicht anders zu helfen als euch zu fragen.
Sofern das Makro richtig geschrieben ist (hier wäre ich über eine Bestätigung oder Verbesserung dankbar), würde ich gerne wissen, wie ich mir die Werte der laufenden Variablen in der Messagebox ausgeben bzw anzeigen lassen kann. Ich hoffe so dann das Problem lösen zu können.
Falls ihr einen schnelleren Weg kennt an die Werte der Variablen zu kommen, wäre ich euch dankbar mir da weiterhelfen zu können (im Optimalfall ein fertiges Script oder die gesuchten Werte).
Ich hoffe ihr könnt mir weiterhelfen,
lg Roy