1.7k Aufrufe
Gefragt in Tabellenkalkulation von markchili Einsteiger_in (67 Punkte)
Hallo zusammen,

ich habe vor längerer Zeit schonmal ein Problem hier gepostet und auch einige gute Antworten bekommen. Leider ists immer noch nicht ganz gelöst. Der ursprüngliche Fred ist dieser hier:

https://supportnet.de/t/2202101/ leider kann man dort allerdings nicht mehr antworten.

Aufgabenstellung bei der ihr vielleicht noch eine gute Idee habt:

Ich habe 5 Tische A, B, C, D, E und 25 Personen 1-25. Wir spielen 5 Spielrunden S1, S2, S3, S4 und S5.

Jede Person soll während der 5 Runden genau EINMAL an jedem Tisch sitzen.

Dabei sollen die Personen möglichst gut durchgemischt werden, d.h. möglichst selten zusammen an einem Tisch sitzen.

Die genaue mathematische Umsetzung ist für mich weniger wichtig als eine praktikable Lösung, also wenn jemand z.B. das ganze per Zufall lösen kann, wäre das in Ordnung für mich.

Grüße und Danke schonmal,
markchili

5 Antworten

0 Punkte
Beantwortet von markchili Einsteiger_in (67 Punkte)
Letzter Stand war der folgenden: (by nighty)

Eingaben:
A2 - A26 Namen
B2 Anzahl der Spielrunden

Macro:
Option Explicit
Sub SpielerRunde()
Range(Cells(1, 3), Cells(ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row, ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column)) = ""
Randomize Timer
Dim ZeilenA As Long
Dim AnzTische As Integer, SpielerRaus As Integer, endeindex As Integer, spalten As Integer, zeilen As Integer, gezogen As Integer
Dim allezahlen As Integer, t As Integer, z As Integer, zaehler As Integer, zaehler1 As Integer, ziehung As Integer, RundenS As Integer
ZeilenA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row - 1
AnzTische = ZeilenA \ 5
SpielerRaus = ZeilenA - AnzTische * 5
endeindex = ZeilenA
spalten = 4
zeilen = 2
ReDim zuzahl(ZeilenA) As String
ReDim arr1(5, AnzTische) As Variant
ReDim arr2(5, AnzTische) As Variant
ReDim zuzahl(ZeilenA) As String
ReDim zahl(ZeilenA) As String
ReDim ArrIndex(AnzTische) As Integer
Cells(1, 1) = "NamensListe"
Cells(1, 2) = "AnzahlRunden"
Cells(1, 3) = "RausFall"
RundenS = Cells(2, 2) - 2
For zaehler = 1 To UBound(ArrIndex())
ArrIndex(zaehler) = zaehler
Cells(1, zaehler + 3) = "1 Runde " & "Tisch " & zaehler
Next zaehler
For allezahlen = 2 To ZeilenA + 1
zuzahl(allezahlen - 1) = Cells(allezahlen, 1)
Next allezahlen
For ziehung = 1 To AnzTische * 5
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(zeilen, spalten) = zahl(ziehung)
If spalten = 3 + AnzTische Then
zeilen = zeilen + 1
spalten = 4
Else
spalten = spalten + 1
End If
Next ziehung
arr1() = Range(Cells(2, 4), Cells(6, 3 + AnzTische))
arr2() = Range(Cells(2, 4), Cells(6, 3 + AnzTische))
For z = 0 To RundenS
For t = 1 To 5
For zaehler1 = 2 To UBound(ArrIndex())
ArrIndex(zaehler1) = ArrIndex(zaehler1)
If ArrIndex(zaehler1) > AnzTische Then ArrIndex(zaehler1) = 1
arr2(t, ArrIndex(zaehler1)) = arr1(t, zaehler1 - 1)
Next zaehler1
arr2(t, ArrIndex(1)) = arr1(t, UBound(ArrIndex()))
Next t
Range(Cells(z * 7 + 9, 4), Cells(z * 7 + 13, 3 + AnzTische)) = arr2()
arr1() = Range(Cells(z * 7 + 9, 4), Cells(z * 7 + 13, 3 + AnzTische))
arr2() = Range(Cells(z * 7 + 9, 4), Cells(z * 7 + 13, 3 + AnzTische))
For zaehler = 1 To UBound(ArrIndex())
ArrIndex(zaehler) = zaehler
Cells(z * 7 + 8, zaehler + 3) = z + 2 & " Runde " & "Tisch " & zaehler
Next zaehler
Next z
If SpielerRaus > 0 Then
For zaehler = 1 To UBound(zuzahl())
Cells(zaehler + 1, 3) = zuzahl(zaehler)
Next zaehler
End If
End Sub


Leider haben wir damit jeden Teilnehmer nur einmal pro Tisch, allerdings sind die Personen immer in 3er Pärchen zusammen unterwegs, d.h. nicht durchmischt.

Hat jemand noch eine kreative Idee was zu tun?

Grüße,
markchili
0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo,

natürlich kann man dort noch antworten, hab den ersten Thread eben mit einer 'Antwort' hochgeschoben.

Gruß
Kalle
0 Punkte
Beantwortet von halfstone Profi (18.1k Punkte)
Hi,

Gäste können auf alte Threads nicht antworten und da sich markchili gerade erst angemeldet hat konnte er vorher nicht antworten.

Gruß Fabian
0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo Fabian,

das ist mir bekannt, aber diese Frage hier hat er ja als Member gestellt, deshalb hatte ich das dann als mögliche Ursache ausgeschlossen.

Gruß
Kalle
0 Punkte
Beantwortet von markchili Einsteiger_in (67 Punkte)
Öhm,

ich hatte das mit dem Gast nicht gecheckt. Sorry für den Doppelpost.
Kann man jetzt auch als Gast in dem alten Thread antworten?

Grüße,
markchili
...