Wie erhält man eine Liste von Kombinationen, welche eine festgelegte Summe ergeben?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

ich hab mal mein Lotto-Makro (vllt interessiert dich das ja auch) für diesen Zweck umgearbeitet und hänge mal beide Codes an. Bereiche:

AA6:AA12 ist Lotto6undZusatzZaus49

AA6:AA10 ist ZufZSum

Komisch, ich kann (schon wieder mal) keine Makrokopien mehr einfügen. Das Bild ist schon drin, ich muss wahrscheinlich abfahren und dann wieder öffnen und das in einem Kommentar nachschicken!


    
Excel-Makro für zweierlei Zufallszahlen - (Programm, rechnen, Microsoft Excel)

Iamiam  11.05.2015, 01:10

es geht einfach nicht, vllt morgen! (hatte das neulich schon mal, aber ich mag den Makrotext jetzt nicht einfach abtippen, der ist mir zu lang und das ist auch Fehler-anfällig!)

0
Iamiam  11.05.2015, 11:58

neuer Versuch, im Ganzen wieder nicht, deshalb zeilenweise: EIN größer als-Zeichen (<, verwende ich in Kommentaren als Pfeil nach links) verhindert EINFÜGEN IN GF! (geschrieben gehts)

Sub Lotto6aus49uZusZ()

Dim c, Cell, Zahl 'Sicherung: Bereichsname Lotto6undZusatzZaus49, 11f01 in BlattT2, ggf Lotto...-Bereich suchen!

Range("Lotto6undZusatzZaus49").ClearContents

For Each c In Range("Lotto6undZusatzZaus49")

neueZahl:

Zahl = Int(Rnd() * 49) + 1 '< +1 verhindert aber Null! Für Roulette entfernen!

For Each Cell In Range("Lotto6undZusatzZaus49")

'muss andere Steuervariable als c sein!

If Cell.Value = Zahl Then GoTo neueZahl

Next

c.Value = Zahl

Next

End Sub

Sub Zufalls5ZsumBegrenzt()

Dim Za

Range("Lotto6undZusatzZaus49").ClearContents

Erste:

Range("ZufZSum").Cells(1) = Int(Rnd() * (49 - 1 - 2 - 3 - 4 - 5)) + 1 'mit 49 alleine könnte 0 entstehen, 49)+1 testen!

Zweite:

Za = Int(Rnd() * (49 - Range("ZufZSum").Cells(1) - 1 - 2 - 3 - 4)) + 1

If Za = Range("ZufZSum").Cells(1) Then GoTo Zweite

Range("ZufZSum").Cells(2) = Za

Dritte:

Za = Int(Rnd() * (49 - Range("ZufZSum").Cells(1) - Range("ZufZSum").Cells(2) - 1 - 2 - 3)) + 1

If Za = Range("ZufZSum").Cells(1) Or Za = Range("ZufZSum").Cells(2) Then GoTo Dritte

Range("ZufZSum").Cells(3) = Za

Vierte:

Range("ZufZSum").Cells(4).ClearContents

Za = Int(Rnd() * (49 - Range("ZufZSum").Cells(1) - Range("ZufZSum").Cells(2) - Range("ZufZSum").Cells(3) - 1 - 2)) + 1

If Za = Range("ZufZSum").Cells(1) Or Za = Range("ZufZSum").Cells(2) Or Za = Range("ZufZSum").Cells(3) Then GoTo Vierte

Range("ZufZSum").Cells(4) = Za

Za = 50 - Application.WorksheetFunction.Sum(Range("ZufZSum"))

If Za = Range("ZufZSum").Cells(1) Or Za = Range("ZufZSum").Cells(2) Or Za = Range("ZufZSum").Cells(3) Or Za = Range("ZufZSum").Cells(4) Then GoTo Vierte

Range("ZufZSum").Cells(5) = Za

End Sub

So, das ging zwar mühsam, weil mit kopieren+einfügen die Umbrüche nicht rüberkommen, aber es ging.

Wenn Du die zwei Bereiche definiert hast (s. Hauptantwort), dann

korrigiere die Makronamen im gelben Bereich bzw rechts daneben (für die Funktion nicht essentiell, nur wg Stimmigkeit)

Kopiere den Code hier und füge ihn in ein neues Modulblatt ein (also keinesfalls in ein Worksheet-Modul!) und weise dann den beiden Schaltflächen (Lotto: Autoform 6-Eck-Fläche, 5summenbegrenzteZufallszahlen: normales Textfeld) je das entsprechende Makro zu. 

Bedingte Formatierung sowohl für Lottozahlen wie auch für Ergebnisliste (Bereich Lotto6undZusatzZaus49)

T6:   =ZÄHLENWENN(Lotto6undZusatzZaus49;T6)>0

wird angewendet auf: =$T$6:$Z$12

Die Sortierung in AC7 ist nur eine optische Erleichterung, die Bedingung fürs Bed.Format ist:

Zellwert=$AA$12, angewendet auf =$T$6:$Z$12

Am Ende verschiebszt Du alles gemeinsam an einen von Dir gewünschten Ort. Willst du das in einem anderen Blatt, dann nicht kopieren, sonden AUSSCHNEIDEN ond an gewünschter Stelle einfügen.

Viel Spass!

(nächste Hürde: zwischenzeitlich ausgeloggt :-((()

1
Iamiam  11.05.2015, 12:16
@Iamiam

Der gelbe Text braucht Dich nicht zu interessieren (Fragen und Planungen)

Ich verstehe nicht viel von Stochastik, stochere also mit der Zufallszahl im (Zahlen-)Nebel rum, Deine Bedingungen werden erfüllt, aber es gibt eine möglicherweise sehr ungleichmäßige Verteilung. (Weiß aber nicht, ob das überhaupt vermeidbar wäre.)

Das -1-2-3-4 im Faktor 50 von Zufallszahl resultiert daher, dass ja für die restlichen Zahlen noch MINDESTENS  1,2,3,4 an Platz bleiben muss. Könnte zu Widerspruch/Blockade führen, wenn 1,2,3,4, durch vorherige Zahl schon belegt waren, ich überseh es nicht ganz, probiers einfach aus.

@Max: danke für den Tipp, hab ihn mal notiert, will mich aber nicht nochwo anmelden mit der Folge von wahrscheinlich einer Kaskade von Werbemails.

0

Meinst Du, wenn die Summe zB 50 ist, Kombinationen wie 1 + 2 + 3 + 4 + 5 oder 8 + 9 + 10 + 11 + 12 usw. ?

Zahl der Permutationen von 5  Elementen ist 5! = 120.

Du wählst das 1. Zahl aus: 5 Möglichkeiten. Für die 2. Zahl bleiben 4 Möglichkeiten usw.


maximilianus7  09.05.2015, 23:09

nein, das sind kombinationen ohne wiederholung von 50 elementen zu je 5. die formel dazu darfst du (stekum) raussuchen.

0
stekum  09.05.2015, 23:30

Warum ich?

0