Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
372to376
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
372to376
372to376
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Werteanalysen

Werteanalysen
29.01.2004 08:09:02
Dieter
Welcher Fachmann kann helfen? Kann Excel sowas? Ich habe beispielsweise in den Zellen A1 bis A20 die Zahlen 1 bis 20 eingetragen. Wenn ich nun z.B. erfragen will, wie sich die Zahl "3" aus den diversen Zellen zusammensetzen kann, wäre hier die Anwort einfach, weil es nur die Zellen 1 und 2 oder nur die Zelle 3 sein kann. Kann man sich das auch errechnen lassen? Durch welche Zellenkombinationen könnte sich der Wert "50" z. B. zusammensetzen? Natürlich darf jeder Wert aus den Zellen nur einmal verwendet werden. Wie müßte ich das umsetzen?
Danke schonmal an die Profis
Dieter

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
50!
29.01.2004 08:28:34
(.)
50! (50 Fakultät)
AW: 50!
29.01.2004 10:23:29
Fabian
50! = 1x2x3x4x5...x47x48x49x50 = 3,0414093201713378043612608166065e+64
... wie bitteschön soll diese riesen Zahl in Zusammenhang mit seinem Problem stehen?
Ich glaube, der Hinweis auf Fakultäten ist hier fehl am Platz. Hier könnte eine mehr oder weniger intelligente Vergleichsabfrage helfen. Eine grobe Schätzung meinerseits liefert dafür allerdings eine exponentielle Komplexität, d.h. für lange Zahlenreihen wird das recht langsam werden.
Viele Grüsse
Fabian
AW: 50!
29.01.2004 10:45:23
Harald Kapp
Hallo,
das Problem fängt doch damit an, dass die Aufgabenstellung gar nicht genau spezifiziert ist:
Welche Rechenarten dürfen/müssen verwendet werden, um die Zahlen zu "kombinieren"?
Bei einer Multiplikation lässt sich die Frage evtl. noch über die Primzahlzerlegung der Zielzahl (50) lösen. Wenn auch Addition zugelassen wird, dann steigt die Zahl der Möglichen drastisch. Wenn dann auch noch Subtraktion ode Division erlaubt ist, dann muss wohl ein Zahlentheoretiker ran, um die Frage zu klären.

Beispiel: 1, 2, 3, 4, 5 Zielzahl 10
Mit "*" 1 Lösung: 2*5
Mit "+" 3 Lösungen: 1+4+5, 1+2+3+4, 2+3+5,
Mit "+" und "*" weitere Lösungen: 2+3+5, 1*(2+3+5) [unterschiedlich von der vorherigen Lösing, da hier "1" explizit mit "ombiniert" wird, 2*5+4-3-1 ...

Gruß Harald
Anzeige
AW: 50!
29.01.2004 10:51:54
Andi
Warum meinst Du, dass die Aufgabenstellung nicht genau spezizifiert ist?
Dieter schreibt als Beispiel, dass eine 3 sich nach dem gewünschten System entweder aus einer 1 und einer 2 oder nur aus einer 3 zusammensetzt.
Von den vier Grundrechenarten kommt demnach wohl nur die Addition in Frage, oder?
Schönen Gruß,
Andi
AW: 50!
29.01.2004 11:01:28
Harald Kapp
Hallo Andi,
entschuldige bitte meine abweichende Meinung, aber das ist Ansichtssache.
Bei dem Beispiel mit 1, 2 und 3 kommt man nämlich mit Multiplikation, Division und Subtraktion ohnehin nicht weiter.
Nichts für ungut
Harald
noch offen
29.01.2004 11:10:15
Andi
Hallo Harald,
auch ich bitte um Nachsicht für eine wiederum abweichende Meinung :-)
Multiplikation und Division wären durch (3*1) bzw. (3/1) möglich. Dieter hat aber ausdrücklich "1 und 2 oder *nur* die Zelle 3" geschrieben.
Am besten wäre es aber wohl tatsächlich, wenn Dieter sich nochmal melden würde, um etwas Licht ins Dunkel zu bringen.
Schönen Gruß,
Andi
Anzeige
AW: 50!
29.01.2004 15:45:46
dieter
Hallo ihr beiden. Komme grad von der arbeit und freue mich, wie ihr über meinen fall diskutiert. ich muß in dem fall andi die blumen reichen, zumindestens was seine interpretation des falles wiederspiegelt. es zählen nur additionen. im fall "50" sollten z.b als ergebnis "18,17,15" und "18,17,8,7" und wahrscheinlich noch einige hundert andere möglichkeiten rauskommen. harald und andi und andere, ich bin nicht der profi, wenn ihr ne idee habt, bitte den lösungsweg verständlich für mich aufzeigen.
danke
dieter
AW: 50!
29.01.2004 16:09:48
Andi
Hallo Dieter,
ich glaube das Hauptproblem liegt hier nicht in der Umsetzung in Excel/VBA, sondern darin, die logische Struktur hinter Deinem Problem herauszufinden.
Nachdem ich jetzt die Aufgabenstellung sicher weiss, grübel ich gerne mal ein bisschen darüber; allerdings wird's heute wohl nix mehr mit der Lösung, unsere kapitalistische Wirtschaftsordnung zwingt nämlich auch mich, gelegentlich etwas zur Gewinnmaximierung meiner Firma beizutragen, und der Feierabend is heute schon verplant :-)
Ich meld' mich auf jeden Fall wieder.
Bis dahin,
Andi
Anzeige
AW: 50!
30.01.2004 17:53:16
Dieter
Hallo Andi!
Vielen Dank, wenn Du Dich bemühren würdest. Für mich ist das eindeutig zu hoch :(((
Dieter
leider noch nix
02.02.2004 11:03:24
Andi
Hallo Dieter,
bis jetz hab' ich leider noch nix vorzeigbares zustande gebracht, ich glaub, das wird recht umfangreich; vielleicht denk ich auch nur zu kompliziert. Eventuell Mitlesende sind jedenfalls herzlich eingeladen, sich ebenfalls die Köpfe zu zerbrechen.
Wenn mir noch was einfällt, meld ich mich in einem neuen Thread wieder, weil dieses hier ja bald ins Archiv rutscht.
Schönen Gruß,
Andi
AW: leider noch nix
02.02.2004 12:58:55
Andi
Hi nochmal,
weil mich die Sache jetzt langsam selbst interessiert, hab' ich mir erlaubt, das Problem in einem Mathematik-Forum zu posten. Vielleicht werden wir da ja geholfen...
http://www.mathematik-forum.de/forum/showthread.php?t=21497
Schönen Gruß,
Andi
Anzeige
AW: leider noch nix
02.02.2004 16:54:28
Dieter
Hallo Andi!
Danke für Deinen Einsatz. Sepp hatte mir zwischenzeitlich auch geantwortet (vielleicht hast Du sogar sein Posting gelesen. Damit kam ich schon echt weit. Ich liste mal seinen Vorschlag und mein Dazutun ab, weil das eigentlich schon ganz gut funzt. Bis jetzt habe ich maximal 10 Kombinationsmöglichkeiten, könnte das aber glaube ich auch unbegrenzt fortführen. Nur mein Rechner macht dann langsam schlapp. Bei dreißig zu kombinierenden Ziffern werden schon über 53 Millionen Möglichkeiten abgearbeitet, und je mehr Ziffern ich nehme, desto progressiver steigt die Kurve.

Sub Summand_Kombinationen_berechnen()
Dim Werte As Range
Dim spalte As Integer
Dim zeile As Long
Dim zStart As Long
Dim Gesucht As Double, Kombinationen As Double
Dim Startzeit As Variant
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer
'I. Wertezelle feststellen & Inputbox darstellen
Set Werte = Selection
spalte = Werte.Row + 3
zeile = Werte(1).Row
zStart = zeile
'Worksheets(1).UsedRange.SpecialCells(xlConstants, xlNumbers).Select
Kombinationen = Application.Combin(Werte.Count, 2) + Application.Combin(Werte.Count, 3) _
+ Application.Combin(Werte.Count, 4) _
+ Application.Combin(Werte.Count, 5) _
+ Application.Combin(Werte.Count, 6) _
+ Application.Combin(Werte.Count, 7) _
+ Application.Combin(Werte.Count, 8) _
+ Application.Combin(Werte.Count, 9) _
+ Application.Combin(Werte.Count, 10) _
'InputBox gibt einen String zurück, daher muß bei u.g. Vergleich der Rückgabestring
'mit CDbl in eine Zahl umgewandelt werden
Gesucht = CDbl(InputBox("Für die angegebene Summe werden alle Kombinationsmöglichkeiten aus den einzelnen Summanden errechnet. " & _
"Maximal " & Kombinationen & " Kombinationsmöglichkeiten werden durchgerechnet ! " & Chr(13) & _
Chr(13) & "Bitte die Summe angeben:"))
'Dauer der Berechnung feststellen (Timer auf Null stellen)
Startzeit = Timer
Application.ScreenUpdating = False
'II. Berechnung mit 2 Möglichkeiten
'die innere Schleife muß zwingend bei a+1 und nicht bei 2 beginnen
'( ansonsten wird a+ b und b+ a gerechnet !)
For a = 1 To Werte.Cells.Count - 1
For b = a + 1 To Werte.Cells.Count
'Range("A1").Activate
'Binäre Rechenmethoden und deren Umandlung in absolute Zahlen kann zu
'Problemen führen (Bsp.: 1 + 2 = 2,999988 !). Besser ist es statt dessen
'auf eine möglichst kleine Differenz zu prüfen
["ABS(Berechnet-Gesucht) <0.001]
If Abs(Werte.Cells(a) + Werte.Cells(b) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & Werte.Cells(b) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
'III. Berechnung mit 3 Möglichkeiten
For a = 1 To Werte.Cells.Count - 2
For b = a + 1 To Werte.Cells.Count - 1
For c = b + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
'IV. Berechnung mit 4 Möglichkeiten
For a = 1 To Werte.Cells.Count - 3
For b = a + 1 To Werte.Cells.Count - 2
For c = b + 1 To Werte.Cells.Count - 1
For d = c + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) + _
Werte.Cells(d) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " + " & Werte.Cells(d) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
Next
'V. Berechnung mit 5 Möglichkeiten
For a = 1 To Werte.Cells.Count - 4
For b = a + 1 To Werte.Cells.Count - 3
For c = b + 1 To Werte.Cells.Count - 2
For d = c + 1 To Werte.Cells.Count - 1
For e = d + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) + _
Werte.Cells(d) + Werte.Cells(e) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " + " & _
Werte.Cells(d) & " + " & Werte.Cells(e) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
Next
Next
'VI. Berechnung mit 6 Möglichkeiten
For a = 1 To Werte.Cells.Count - 5
For b = a + 1 To Werte.Cells.Count - 4
For c = b + 1 To Werte.Cells.Count - 3
For d = c + 1 To Werte.Cells.Count - 2
For e = d + 1 To Werte.Cells.Count - 1
For f = e + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) + _
Werte.Cells(d) + Werte.Cells(e) + Werte.Cells(f) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " + " & _
Werte.Cells(d) & " + " & Werte.Cells(e) & " + " & Werte.Cells(f) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
Next
Next
Next
'VII. Berechnung mit 7 Möglichkeiten
For a = 1 To Werte.Cells.Count - 6
For b = a + 1 To Werte.Cells.Count - 5
For c = b + 1 To Werte.Cells.Count - 4
For d = c + 1 To Werte.Cells.Count - 3
For e = d + 1 To Werte.Cells.Count - 2
For f = e + 1 To Werte.Cells.Count - 1
For g = f + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) + _
Werte.Cells(d) + Werte.Cells(e) + Werte.Cells(f) + Werte.Cells(g) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " + " & _
Werte.Cells(d) & " + " & Werte.Cells(e) & " + " & Werte.Cells(f) & " + " & Werte.Cells(g) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
Next
Next
Next
Next
'VIII. Berechnung mit 8 Möglichkeiten
For a = 1 To Werte.Cells.Count - 7
For b = a + 1 To Werte.Cells.Count - 6
For c = b + 1 To Werte.Cells.Count - 5
For d = c + 1 To Werte.Cells.Count - 4
For e = d + 1 To Werte.Cells.Count - 3
For f = e + 1 To Werte.Cells.Count - 2
For g = f + 1 To Werte.Cells.Count - 1
For h = g + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) + _
Werte.Cells(d) + Werte.Cells(e) + Werte.Cells(f) + Werte.Cells(g) + Werte.Cells(h) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " + " & _
Werte.Cells(d) & " + " & Werte.Cells(e) & " + " & Werte.Cells(f) & " + " & Werte.Cells(g) & " + " & Werte.Cells(h) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
Next
Next
Next
Next
Next
'IX. Berechnung mit 9 Möglichkeiten
For a = 1 To Werte.Cells.Count - 8
For b = a + 1 To Werte.Cells.Count - 7
For c = b + 1 To Werte.Cells.Count - 6
For d = c + 1 To Werte.Cells.Count - 5
For e = d + 1 To Werte.Cells.Count - 4
For f = e + 1 To Werte.Cells.Count - 3
For g = f + 1 To Werte.Cells.Count - 2
For h = g + 1 To Werte.Cells.Count - 1
For i = h + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) + _
Werte.Cells(d) + Werte.Cells(e) + Werte.Cells(f) + Werte.Cells(g) + Werte.Cells(h) + Werte.Cells(i) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " + " & _
Werte.Cells(d) & " + " & Werte.Cells(e) & " + " & Werte.Cells(f) & " + " & Werte.Cells(g) & " + " & Werte.Cells(h) & " + " & Werte.Cells(i) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
'X. Berechnung mit 10 Möglichkeiten
For a = 1 To Werte.Cells.Count - 9
For b = a + 1 To Werte.Cells.Count - 8
For c = b + 1 To Werte.Cells.Count - 7
For d = c + 1 To Werte.Cells.Count - 6
For e = d + 1 To Werte.Cells.Count - 5
For f = e + 1 To Werte.Cells.Count - 4
For g = f + 1 To Werte.Cells.Count - 3
For h = g + 1 To Werte.Cells.Count - 2
For i = h + 1 To Werte.Cells.Count - 1
For j = i + 1 To Werte.Cells.Count
If Abs(Werte.Cells(a) + Werte.Cells(b) + Werte.Cells(c) + _
Werte.Cells(d) + Werte.Cells(e) + Werte.Cells(f) + Werte.Cells(g) + Werte.Cells(h) + Werte.Cells(i) + Werte.Cells(j) - Gesucht) < 0.001 Then
Cells(zeile, spalte) = Werte.Cells(a) & " + " & _
Werte.Cells(b) & " + " & Werte.Cells(c) & " + " & _
Werte.Cells(d) & " + " & Werte.Cells(e) & " + " & Werte.Cells(f) & " + " & Werte.Cells(g) & " + " & Werte.Cells(h) & " + " & Werte.Cells(i) & " + " & Werte.Cells(j) & " = " & Gesucht
zeile = zeile + 1
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Application.ScreenUpdating = True
MsgBox "Dauer : " & Timer - Startzeit & " Sekunden!" & vbLf & vbLf & _
"Es wurden " & zeile - zStart & " Kombinationen gefunden!"
End Sub

Wenn Du was findest, was einfacher geht und nicht so zeitintensiv ist......
Vielleicht meldet sich auch jemand aus dem Mathe-Forum!!!
Schöne Grüße
Dieter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige