807 Aufrufe
Gefragt in Tabellenkalkulation von
Wir stehen vor der Herausforderung auf der nächsten Tagung
8 Tische mit 6 Plätzen = 48 Teilnehmern zu besetzen.
Diese Teilnehmer sollen sich im Lauf der Tagung Kennenlernen, dazu werde in kurzen Intervallen
Diskussionen an den Tischen geführt und anschließend die Tische und die Zusammensetzung
gewechselt.
Die Tisch-Wechsel und Zusammensetzungen sollen von uns so durchgeführt werden, das am
Ende der Tagung alle 48 TN mit den anderen 47 Teilnehmern mindesten 1 mal an einem Tisch
zusammengesessen haben und ein Thema diskutiert haben."jeder soll mit jedem mind einmal
gesprochen haben"
Wie viele Wechsel sind nötig, damit diese Maxime erfüllt ist und wie sehen die konkreten
Tischbesetzungen pro Runde pro Teilnehmer aus?

Tische ABCDEFGH
Plätze/Tisch =6
Teilnehmer: 48 (1-48)
N-fache Wechsel =?

Tischbesetzung pro Runde? (Platzkarten für jeden TN für Jede Runde)

Jede PIVOT, XLS oder ACCESS Lösung ist willkommen.
Auch eine fertige Teil-Lösung in Textform (Es werden 2865 Wechselrunden benötigt)
hilft uns schon enorm.

20 Antworten

0 Punkte
Beantwortet von
Hallo TRAINEE_TOM .-)

Auf die schnelle,also kein vorzeigemakro und auch nicht optimiert

Gruss Nighty

Ein Zufallsgenerator
Spalte A ab 2 Zeile 48 Namen

Sub SpielerRunde()
Range(Cells(1, 2), 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
ZeilenA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row - 1
AnzTische = 8
SpielerRaus = ZeilenA - AnzTische * 6
endeindex = ZeilenA
spalten = 3
zeilen = 2
ReDim zuzahl(ZeilenA) As String
ReDim arr1(6, AnzTische) As Variant
ReDim arr2(6, AnzTische) As Variant
ReDim zuzahl(ZeilenA) As String
ReDim zahl(ZeilenA) As String
ReDim ArrIndex(AnzTische) As Integer
Cells(1, 1) = "NamensListe"
For zaehler = 1 To UBound(ArrIndex())
ArrIndex(zaehler) = zaehler
Cells(1, zaehler + 2) = "1 Runde " & "Tisch " & zaehler
Next zaehler
For allezahlen = 2 To 49
zuzahl(allezahlen - 1) = Cells(allezahlen, 1)
Next allezahlen
For ziehung = 1 To 8 * 6
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 = 2 + AnzTische Then
zeilen = zeilen + 1
spalten = 3
Else
spalten = spalten + 1
End If
Next ziehung
arr1() = Range(Cells(2, 3), Cells(7, 2 + AnzTische))
arr2() = Range(Cells(2, 3), Cells(7, 2 + AnzTische))
For z = 0 To 4 'hhhh
For t = 1 To 5
For zaehler1 = 1 To UBound(ArrIndex())
If ArrIndex(zaehler1) > AnzTische Then ArrIndex(zaehler1) = 1
Next zaehler1
arr2(t, ArrIndex(1)) = arr1(t, UBound(ArrIndex()))
For zaehler1 = 1 To UBound(ArrIndex()) - 1
arr2(t, ArrIndex(zaehler1 + 1)) = arr1(t, zaehler1)
Next zaehler1
For zaehler1 = 1 To UBound(ArrIndex())
ArrIndex(zaehler1) = ArrIndex(zaehler1) + 1
Next zaehler1
Next t
Range(Cells(z * 7 + 9, 3), Cells(z * 7 + 14, 2 + AnzTische)) = arr2()
arr1() = Range(Cells(z * 7 + 9, 3), Cells(z * 7 + 14, 2 + AnzTische))
arr2() = Range(Cells(z * 7 + 9, 3), Cells(z * 7 + 14, 2 + AnzTische))
For zaehler = 1 To UBound(ArrIndex())
ArrIndex(zaehler) = zaehler
Cells(z * 7 + 8, zaehler + 2) = z + 2 & " Runde " & "Tisch " & zaehler
Next zaehler
Next z
End Sub
0 Punkte
Beantwortet von
Hallo TRAINEE_TOM

Wenn es so ungefähr passr ,überarbeite ich es,ist ja noch bisl Chaotich,war schon spät gestern!

Gruss Nighty
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo TRAINEE_TOM,

Bei den 47 Teilnehmern, die jeder kennenlernen soll und fünf Teilnehmern, die er mit jeder Sitzung an seinem Tisch haben kann, wären zehn Sitzungen erforderlich. Ich sehe aber keinen Weg, ganz ohne Wiederholungen auszukommen. Nach meiner Betrachtung brauchst du 22 Sitzungen.
Für die Betrachtung benenne ich die Tische A..H und nummeriere die Plätze an jedem Tisch mit 1..6, also heißen die Plätze A1, A2...A6, B1, B2..B6,.... H6
Ich lasse bei jedem Wechsel die Teilnehmer nach folgendem Muster wechseln:
A1 -> B1
A2 -> C1
A3 -> D1
...
A6 -> G1
B1 -> H1
B2 -> A2
B3 -> B2
...
...
H4 -> G6
H5 -> H6
H6 -> A1

Dann hat nach 22 Sitzungen jeder mindestens einmal mit jedem anderen zusammengesessen.
Die Sitzverteilung und das Rotationsschema habe ich in einer Excel-Datei abgelegt, die du hier finden kannst:
www.xup.in/dl,41367017/Tischproblem.xlsx/

In der Datei sieht man, dass jeder mit einigen Teilnehmern mehrfach zusammensitzt, aber es gibt eben in jeder dieser Sitzungen auch mindestens eine Paarung, die jeweils nur einmal auftaucht, deshalb nehme ich an, dass su nicht mit weniger Sitzungen auskommen wirst.

Gruß
computerschrat
0 Punkte
Beantwortet von
Hallo computerschrat!

Das Problem ist,wenn einer ausfaellt,dann bricht das gerüst!
Da muss syntaktisch ganz anders rangegangen werden,als es mein Code vorgibt!
Aber wir haben ja Dich *hihi*
Mein Code ist da doch recht Simpel gestrickt,nach ,nennen wir es mal Ausschlussverfahren .-)

Ideen von anderen usern sind sehr willkommen,da es doch ein Amüsantes Problem ist,ich hatte mich damit schonmal beschäftigt
passte den Code nur noch ein wenig an.

@computerschrat
Ich bin leider Halbblind geworden und kann Zwecks konntrolle nicht so Optimieren wie es sein sollte!
So bleibt eben Spaghetti Code ohne entsprechende Test's
Das Ergebnis sah aber gar nicht so schlecht aus .-)
Die Datei bitte im Xls Format,du hast vergessen,das ich noch vom letzten Kaiser übriggeblieben bin *g*
0 Punkte
Beantwortet von
Hallo computerschrat!

Mein Steckenpferd sind ,Dynamiche Expandierende Arrays mit endlosen Dimensionen die meinen Rechner lahmlegen!
Da raucht der Kopf ,bis du süchtig wirst,das macht spass,auch wenn es kaum brauchbar ist
So sitz ich im Park und seniere über eventuelle bezuege zu den Dimensionen

Gruss Nighty
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Nighty,

Ich sitze fast den ganzen Tag am PC und denke über Gefährdungen, die von Maschinen ausgehen können nach. Da mache ich gelegentlich mal Pausen und schaue ins Supportnet.
Weil ich mit Makros bisher nie ernsthaften Kontakt hatte, konnte ich nicht erkennen, ob dein Makro nicht möglicherweise etwas sehr Ähnliches macht, wie mein Lösungsansatz.
Ich habe mit einfach vorgestellt, die Teilnehmer laufen in einer Reihe aneinander vorbei, so dass jeder jeden einmal sieht. Jetzt könnte man ja immer sechs Leute zusammenfassen und als Tisch definieren. Weil aber bei der einfachen Reihe jeder seine umgebenden Nachbarn beibehält braucht es mehr Wanderungen, also habe ich die Reihenfolge während des Vorbeilaufens ständig geändert und dabei kam meine Vorgehensweise heraus.

Ich habe meine Datei nochmal als XLS abgespeichert, hier der Link darauf:
www.xup.in/dl,19176702/Tischproblem.xls/

Wie viele notwendige Sitzungen an verschiedenen Tischen kommen bei deinem Makto heraus?

Gruß
computerschrat
0 Punkte
Beantwortet von
Hallo Computerschrat .-)

Mein Code hat 248 Einzelpositionen errechnet

8*6*6

Ich hoffe doch das das so stimmt .-)
die Möglichkeiten werden ja durch 6 Gruppen extrem reduziert
Dazu muesste ich allerdings die Häufigkeit der Positionen mal Prüfen
Was ich noch nicht gemacht hatte .-)

Dein Thema "über Gefährdungen" ist auch hochinteressant!

Datei schau ich mir die Tage an!

Gruss Nighty
0 Punkte
Beantwortet von
Hallo Computerschrat ^^

ops ... 288

Gruss Nighty
0 Punkte
Beantwortet von
Hallo Computerschrat .-)

Du hast vielmehr Varianten dargestellt!
Muss ich mir nochmal beizeiten genauer anschauen!

Der Gedanke war!
Die sechser Gruppen haben massiven reduzierenden
einfluss auf die Variantenanzahl.

Was sagen denn unsere Mathematiker zu der Aufgabenstellung!
Was ist das Minimum an Varianten?

Gruss Nighty
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Nighty,,

Was meinst du mit viel mehr Varianten dargestellt.
Die Spalten A bis H sind die Tische und eine Besetzung wird in
sechs Zeilen dargestellt, weil in jeder Sitzung immer sechs
Teilnehmer am einem Tisch sitzen. Danach kommt eine
Leerzeile, so dass die Sitzungen insgesamt ihre 160 Zeilen
brauchen.

Gruß
computerschrat
...