9.4k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

aufgrund meiner diversen guten Erfahrungen mit Euch als Problemlösern, habe ich heute mal wieder eine kleine Excel Knobelaufgabe:

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

48 Antworten

0 Punkte
Beantwortet von
Zusätzlich muß die oberste Zeile die Beschriftung Runde 1 (A1), Runde 2 (B1) etc. haben
Nach unten müßen die Tische angetragen werden, oder?

Ja sieht schon fast perfekt aus ...

Weiter so!

Grüße,
Markus
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi markchili ^^

25 personen werden auf 5 tische bei 5 runden verteilt,jetzt uebersichlicher

gruss nighty


'spalte g zeile 2 bis 26 namen



Sub makro01()
Randomize Timer
Dim daten(25)
Dim daten1(25)
ReDim zuzahl(25) As String
Dim zahl(25) As String
Dim endeindex As Integer, spalten As Integer, zeilen As Integer
Dim allezahlen As Integer, t As Integer, z As Integer, a1 As Integer, a2 As Integer, a3 As Integer, a4 As Integer, a5 As Integer
Dim ziehung As Integer
Dim gezogen As Integer
ReDim arr1(5, 5) As Variant
ReDim arr2(5, 5) As Variant
endeindex = 25
For allezahlen = 2 To 26
zuzahl(allezahlen - 1) = Cells(allezahlen, 7)
Next allezahlen
spalten = 1
zeilen = 2
For t = 1 To 5
Cells(1, t) = "Tisch " & t
Next t
Cells(1, 7) = "Namensliste"
For ziehung = 1 To 25
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)
daten(ziehung) = zahl(ziehung)
If spalten = 5 Then
zeilen = zeilen + 1
spalten = 1
Else
spalten = spalten + 1
End If
Next ziehung
arr1() = Range("A2:E6")
arr2() = Range("A2:E6")
a1 = 1
a2 = 3
a3 = 5
a4 = 2
a5 = 4
For z = 0 To 3
For t = 1 To 5
If a1 > 5 Then a1 = 1
If a2 > 5 Then a2 = 1
If a3 > 5 Then a3 = 1
If a4 > 5 Then a4 = 1
If a5 > 5 Then a5 = 1
arr2(t, 2) = arr1(t, a1)
arr2(t, 4) = arr1(t, a2)
arr2(t, 1) = arr1(t, a3)
arr2(t, 3) = arr1(t, a4)
arr2(t, 5) = arr1(t, a5)
arr1(t, a1) = arr2(t, 2)
arr1(t, a2) = arr2(t, 3)
arr1(t, a3) = arr2(t, 1)
arr1(t, a4) = arr2(t, 3)
arr1(t, a5) = arr2(t, 5)
a1 = a1 + 1
a2 = a2 + 1
a3 = a3 + 1
a4 = a4 + 1
a5 = a5 + 1
Next t
b1 = 9
Range("A" & z * 7 + b1 & ":E" & z * 7 + 4 + b1) = arr2()
arr1() = Range("A" & z * 7 + b1 & ":E" & z * 7 + 4 + b1)
arr2() = Range("A" & z * 7 + b1 & ":E" & z * 7 + 4 + b1)
For t = 1 To 5
Cells(z * 7 + b1 - 1, t) = "Tisch " & t
Next t
Next z
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi markchili ^^

ich ueberleg mir eine flexible loesung

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

nochmals korrigiert .-)

gruss nighty

kurz erklaerung fuer interessierte

aus einer namensliste mit 25 feldern wird ein feld ,5 mal 5 zufallsgeneriert ohne doppelte dargestellt

durch rotation von x wie y wird aus diesem feld eine fortfuehrende variation erzeugt

wiederum aus diese variation eine neue usw.

'spalte g zeile 2 bis 26 namen

Option Explicit
Sub makro01()
Randomize Timer
ReDim zuzahl(25) As String
ReDim arr1(5, 5) As Variant
ReDim arr2(5, 5) As Variant
Dim zahl(25) As String
Dim endeindex As Integer, spalten As Integer, zeilen As Integer
Dim allezahlen As Integer, t As Integer, z As Integer
Dim a1 As Integer, a2 As Integer, a3 As Integer, a4 As Integer, a5 As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 25
For allezahlen = 2 To 26
zuzahl(allezahlen - 1) = Cells(allezahlen, 7)
Next allezahlen
spalten = 1
zeilen = 2
For t = 1 To 5
Cells(1, t) = "Tisch " & t
Next t
Cells(1, 7) = "Namensliste"
For ziehung = 1 To 25
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 = 5 Then
zeilen = zeilen + 1
spalten = 1
Else
spalten = spalten + 1
End If
Next ziehung
arr1() = Range("A2:E6")
arr2() = Range("A2:E6")
a1 = 1
a2 = 3
a3 = 5
a4 = 2
a5 = 4
For z = 0 To 3
For t = 1 To 5
If a1 > 5 Then a1 = 1
If a2 > 5 Then a2 = 1
If a3 > 5 Then a3 = 1
If a4 > 5 Then a4 = 1
If a5 > 5 Then a5 = 1
arr2(t, 2) = arr1(t, a1)
arr2(t, 4) = arr1(t, a2)
arr2(t, 1) = arr1(t, a3)
arr2(t, 3) = arr1(t, a4)
arr2(t, 5) = arr1(t, a5)
arr1(t, a1) = arr2(t, 2)
arr1(t, a2) = arr2(t, 4)
arr1(t, a3) = arr2(t, 1)
arr1(t, a4) = arr2(t, 3)
arr1(t, a5) = arr2(t, 5)
a1 = a1 + 1
a2 = a2 + 1
a3 = a3 + 1
a4 = a4 + 1
a5 = a5 + 1
Next t
Range("A" & z * 7 + 9 & ":E" & z * 7 + 13) = arr2()
arr1() = Range("A" & z * 7 + 9 & ":E" & z * 7 + 13)
arr2() = Range("A" & z * 7 + 9 & ":E" & z * 7 + 13)
For t = 1 To 5
Cells(z * 7 + 8, t) = "Tisch " & t
Next t
Next z
End Sub
0 Punkte
Beantwortet von
Sorry Nighty,

bin heute nicht dazu gekommen es umfassender auszuprobieren.
Mir ist bisher nichts aufgefallen das mich verwundert hätte.

Ich meld mich Montag nochmal wenn ich es ausführlicher testen konnte.

100 mal Danke auf jden Fall schonmal für deinen Einsatz!

Grüße und nochmal danke,
markchili
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

nun ist schon mal eine recht interessante problematik gestellt und trotzdem keine mitstreiter fuer inspiration und motivation :-(

ihr seid ja schlaff

1)hab ich die mathematiker vermisst
2)hab ich formelfreaks vermisst
3)hab ich vb begeisterten vermisst

das thema wird fortgesetzt da tische wie anzahl der spieler an den tischen und gesamtspieler flexibel sein sollte :-)

gruss nighty :-)
0 Punkte
Beantwortet von
Hallo alle, (vorallem nighty),

mittlerweile habe ich das ganze etwas um die einfachen Dinge ersetzt um es dann auch wirklich nutzen zu können.

Eine Funktion ist die Druckfunktion der Spielkarten nach Personen, d.h. jeder Teilnehmer soll eine "Laufkarte" bekommen deren Tische er dann nach und nach abgeht.

Dabei ist aufgefallen das die 2. Position an allen Tischen sich nicht pro Spielrunde ändert. D.h. wer in der ersten Runde an 2. Position an Tisch 1 sitzt ist auch noch in Runde 5 an 2. Position am 1. Tisch.

Programmfehler oder Denkfehler?

Grüße,
markchili

PS: nighty du bist echt nen genie
0 Punkte
Beantwortet von
Ach ja und sorry das ich mich so lange nicht gemeldet hatte, war leider eine ganze Zeit ohne Internet ;-/
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all und markchili ^^

liegt vielleicht an den startpositionen,die waren mir eh immer ein wenig merkwuerdig vorgekommen

a1 = 1
a2 = 3
a3 = 5
a4 = 2
a5 = 4

muss ich mir nochmal anschauen :-)

gruss nighty
0 Punkte
Beantwortet von
Hrm was mir noch aufgefallen ist:

Es macht wenig Sinn mit 26 Personen zu spielen da an 5 Tischen mit je 5 Plätzen auch nur 25 Leute Platz haben.
Insofern fällt der 26. Teilnehmer immer raus, ich habe deshalb auch gleich nur 25 Namen eingetragen.

Grüße,
markchili

PS: Anbei der Fehler mit der zweiten Zeile:
Fehler: Zeile 2, gleicher Tisch, jede Runde (z.B.: ipmfy)

Table 1 Table 2 Table 3 Table 4 Table 5
t x n l g
i p m f y
a v c j s
o q r b h
e u k w d

Table 1 Table 2 Table 3 Table 4 Table 5
g t x n l
i p m f y
v c j s a
r b h o q
w d e u k

Table 1 Table 2 Table 3 Table 4 Table 5
l g t x n
i p m f y
c j s a v
h o q r b
u k w d e

Table 1 Table 2 Table 3 Table 4 Table 5
n l g t x
i p m f y
j s a v c
q r b h o
d e u k w

Table 1 Table 2 Table 3 Table 4 Table 5
x n l g t
i p m f y
s a v c j
b h o q r
k w d e u
...