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

Anzahl möglicher Reihenfolgen

Anzahl möglicher Reihenfolgen
28.04.2020 11:06:38
Thomas
Hallo zusammen,
ich benötige leider eure Hilfe.
Ich erstelle aktuell eine Kalkulation in Excel.
Grober Aufbau:
Ich habe ich eine Liste mit 10 Personen. Die Personen 1-10 gebe ich nacheinander per Makro in eine Excel Berechnung ein und gebe die Ergebnisse je Person per Makro danach in einer Tabelle aus.
Bei den Ergebnissen habe ich ein Startdatum von Person 1 und prüfe wie lange es dauert bis bspw. alle nacheinander Urlaub genommen haben und was das Enddatum bei Person 10 wäre.
Das klappt soweit ganz gut.
Nun zu meiner Frage:
Ich möchte die Berechnung erweitern und die Reihenfolge der Personen 1-10 zu allen möglichen Kombinationen erweitern. Jede Kombination soll dann in die Berechnung eingegeben werden.
Für jede Kombination sollen die Ergebnisse dann ausgegeben werden. Ich möchte dadurch die kürzeste Gesamtdauer aller möglichen Kombinationen der Personen 1-10 herausfinden.
Mir fehlt leider der Ansatz wie ich eine Schleife erstellen kann, damit alle möglichen Reihenfolgen nacheinander erstellt und diese dann in der Berechnung eingegeben werden können.
Habt ihr einen Tipp wie ich das anstellen kann?
Mir fehlt leider komplett der Ansatz..
Vielen Dank für eure Hilfe!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anzahl möglicher Reihenfolgen
28.04.2020 11:27:13
Thomas
Hallo zusammen,
anbei zum besseren Verständnis meines Problems die Datei und mit dem entsprechenden Code.
https://www.herber.de/bbs/user/137079.xlsm
Beste Grüße
AW: Anzahl möglicher Reihenfolgen
28.04.2020 12:01:05
ChrisL
Hi Thomas
Wie ich dich verstehe bleibt das Ergebnis immer gleich.
Gesamtdauer = SUMME(Resturlaub)
Ob erst Person 1 oder Person 2 in den Urlaub geht, ist in Bezug auf die Gesamtdauer irrelevant.
Die Anzahl möglicher Kombinationen beträgt wahrscheinlich 1024 (2^10)
cu
Chris
AW: Anzahl möglicher Reihenfolgen
28.04.2020 12:11:38
Thomas
Hallo Chris,
die Excel Beispieldatei bzw den Aufbau der Logik habe ich stark vereinfacht.
In meiner orginalen Berechnung verändern sich die Werte, da mehrere Parameter dort mit einfließen und das Enddatum sich verändert, je nachdem wie die Reihenfolge der Personen ist.
Anzeige
AW: Anzahl möglicher Reihenfolgen
28.04.2020 14:40:53
ChrisL
Hi Thomas
Ich habe noch einmal nachgedacht. Die Anzahl Variationen ist deutlich höher.
10 Personen = knapp 4 Mio.
11 Personen = ca. 40 Mio.
12 Personen = ca. 479 Mio.
13 Personen = ca. 6 Mia.
10 Personen könnte man mit viel Geduld (ein paar Stunden) womöglich noch einzeln durchrechnen.
Das unten angefügte Makro listet die Varianten bei 10 Personen. Zahl 0 = Person 10.
(Ursprung Makro: https://www.vb-paradise.de/index.php/Thread/73418-Abbilden-einer-Reihenfolge/)
Weiter habe ich dann nicht mehr programmiert.
Ich denke der richtige Ansatz wäre vermutlich eine Zielwertsuche. Hängt allerdings von der Anzahl Variablen ab.
Insgesamt (mit den Variablen) wird es vermutlich eine ziemlich komplexe Aufgabe. Hier müssten dann wahrscheinlich irgendwelche Kombinatorik-Profis ran, jedenfalls bin ich als Hobby-VBA'ler vermutlich fehl am Platz.
cu
Chris
Dim j As Long, jj As Long
Sub cmdTest()
j = 1
jj = 0
Call permut(0, 1234567890)
End Sub

Sub permut(ByVal einzel As String, ByVal rest As String)
Dim neuEinzel, neuRest As String
Dim i As Integer
If Not rest = "" Then
For i = 1 To Len(rest)
neuEinzel = einzel & Mid(rest, i, 1)
neuRest = Replace(rest, Mid(rest, i, 1), "")
Call permut(neuEinzel, neuRest)
Next i
Else
Range("A1").Offset(j, 0 + jj).Value = Right(einzel, 10)
If j Mod 1000000 = 0 Then
jj = jj + 1
j = 0
End If
j = j + 1
End If
End Sub

Anzeige
AW: Anzahl möglicher Reihenfolgen
29.04.2020 09:47:47
Thomas
Hallo Chris,
vielen Dank für deine Hilfe.
Eventuell kann ich die Anzahl von 10 auf 5 reduzieren und dann sieht es schon etwas besser aus.
Ich bin mit VBA leider noch nicht wirklich fit... deshalb noch ein blöde Frage.
Wie kann ich es schaffen, dass die Reihenfolgen in Spalten und einzelnen Zellen angegeben werden?
Wenn ich die Ergebnisse in Spalten haben möchte, muss ich den Code ja wie folgt anpassen:
Range("A1").Offset(0 + jj, j).Value = Right(einzel, 5)
Was müsste ich machen, dass die Zahlen in Spalten nach unten angegeben werden?
Bspw:
1 1
2 2
3 3
4 5
5 4
Wenn ich das so anpassen kann, könnte ich evtl. mit der Zielwertsuche weitermachen und das Problem wäre gelöst :)
Anzeige
AW: Anzahl möglicher Reihenfolgen
29.04.2020 11:07:51
ChrisL
Hi Thomas
Dim j As Long
Const intAnzahl As Integer = 7 ' hier anpassen (max. 7)
Sub cmdTest()
Call permut("", Left("123456789", intAnzahl))
End Sub

Sub permut(ByVal einzel As String, ByVal rest As String)
Dim neuEinzel, neuRest As String
Dim i As Integer
If Not rest = "" Then
For i = 1 To Len(rest)
neuEinzel = einzel & Mid(rest, i, 1)
neuRest = Replace(rest, Mid(rest, i, 1), "")
Call permut(neuEinzel, neuRest)
Next i
Else
For i = 1 To intAnzahl
Range("A1").Offset(0 + i - 1, j).Value = Mid(einzel, i, 1)
Next i
j = j + 1
End If
End Sub

cu
Chris
Anzeige
AW: Anzahl möglicher Reihenfolgen
30.04.2020 09:56:07
Thomas
Hallo Chris,
vielen vielen Dank für deine gute Unterstützung!
Bg
AW: Anzahl möglicher Reihenfolgen
28.04.2020 14:40:54
ChrisL
Hi Thomas
Ich habe noch einmal nachgedacht. Die Anzahl Variationen ist deutlich höher.
10 Personen = knapp 4 Mio.
11 Personen = ca. 40 Mio.
12 Personen = ca. 479 Mio.
13 Personen = ca. 6 Mia.
10 Personen könnte man mit viel Geduld (ein paar Stunden) womöglich noch einzeln durchrechnen.
Das unten angefügte Makro listet die Varianten bei 10 Personen. Zahl 0 = Person 10.
(Ursprung Makro: https://www.vb-paradise.de/index.php/Thread/73418-Abbilden-einer-Reihenfolge/)
Weiter habe ich dann nicht mehr programmiert.
Ich denke der richtige Ansatz wäre vermutlich eine Zielwertsuche. Hängt allerdings von der Anzahl Variablen ab.
Insgesamt (mit den Variablen) wird es vermutlich eine ziemlich komplexe Aufgabe. Hier müssten dann wahrscheinlich irgendwelche Kombinatorik-Profis ran, jedenfalls bin ich als Hobby-VBA'ler vermutlich fehl am Platz.
cu
Chris
Dim j As Long, jj As Long
Sub cmdTest()
j = 1
jj = 0
Call permut(0, 1234567890)
End Sub

Sub permut(ByVal einzel As String, ByVal rest As String)
Dim neuEinzel, neuRest As String
Dim i As Integer
If Not rest = "" Then
For i = 1 To Len(rest)
neuEinzel = einzel & Mid(rest, i, 1)
neuRest = Replace(rest, Mid(rest, i, 1), "")
Call permut(neuEinzel, neuRest)
Next i
Else
Range("A1").Offset(j, 0 + jj).Value = Right(einzel, 10)
If j Mod 1000000 = 0 Then
jj = jj + 1
j = 0
End If
j = j + 1
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige