Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zufallauswahl
#1
Hallo Leute,
 
ich stehe vor einer sehr komplexen Aufgabe und bekomme diese einfach nicht gelöst. Ich bin mir auch nicht sicher, ob es dafür überhaupt eine Lösung gibt.
Ich versuche einmal mein Problem zu erklären. Es geht darum, dass ich für eine gesamte Handballsaison einen Plan erstellen möchte (das sind in der Regel ca. 20 Spieltage), in dem jedes Elternteil der Spieler eine andere Aufgabe übernimmt.  Die Liste der Namen umfasst ca. 20-25 Namen.
 
Bei Auswärtsspielen müssen die Eltern die Bereiche Fahrer 1, Fahrer 2, Fahrer 3 bis 6 und Trikots (Trikots waschen) übernehmen. Hier kann jedes Elternteil eingesetzt werden. Bei Auswärtsspielen steht dann bei Gastverein MTV.  Teilweise werden Auswärtsspiele mit einem Bus gefahren, dann soll bei Fahrer 1 – 6 „Bus“ stehen und nur das Feld Trikots soll ausgefüllt werden.
 
Bei Heimspielen müssen die Eltern die Bereiche Kampfgericht 1+2, Brötchen, Laugengebäck, Kuchen und Trikots übernehmen. Bei Heimspielen steht dann bei Heimverein MTV.
Gerade bei Kampfgericht ist das Problem, dass nicht jedes Elternteil eine Ausbildung dafür hat und so nur die Namen eingesetzt werden können bei denen in der oberen Tabelle, entweder bei Vater oder Mutter, ein „ja“ steht. Steht bei beiden Elternteilen ein nein, darf der Name nicht ausgewählt werden.
 
Ich möchte jetzt gerne, dass die Namen aus der Liste automatisch in die jeweiligen Felder nach dem Zufallsprinzip eingetragen werden. Dabei muss aber abgeglichen werden, ob der Name bereits vorher schon vergeben wurde. Beispiel: wenn bei Fahrer 1 ein Name vergeben wurde, dann darf der Name nicht bei Fahrer 2-6 auftauchen. Außerdem möchte ich nicht z.B. bei 2 Aufeinander folgenden Auswärtsspielen, dass die Elternteile zweimal hintereinander fahren müssen.  Also muss auch hier ein Abgleich geschaffen werden, dass die Elternteile alle gleichmäßig eingesetzt werden.
Ich hatte mir jetzt vorgestellt, dass es drei Button neben dem jeweiligen Spieltag gibt. Je nachdem ob wir mit dem Bus oder mit eigenem PKW fahren oder es um ein Heimspiel geht, müsste dann der jeweilige Button gedrückt werden und die Namen werden automatisch eingetragen.
 
Ich bin hier leider völlig überfordert, aber evtl. gibt es ja Cracks hier, die das Problem lösen können.
 
Vielen Dank vorab und beste Grüße
Uwe


Angehängte Dateien
.xlsx   Spielplan.xlsx (Größe: 21,19 KB / Downloads: 9)
Antworten Top
#2
Hallo Uwe

ich habe mir dein Beispiel herunter geladen und schaue es mir morgen in Ruhe an.  Kann dir aber nicht garantieren das ich eine Lösung finde.

Das ist sicher kein 5 Minuten Thread, diese Logik muss gut durchdacht sein. Eine interessante "Knobelaufgabe", und sicher reizvoll fürs Gehirn.
Vielleicht beteiligen sich naoch andere Kollegen mit guten Lösungen an diesem Thread.  Waere schön für dich, das steigert deine Chancen.

mfg  Gast 123
Antworten Top
#3
Ein Lob für eine Aufgabenstellung, unter der man sich etwas vorstellen kann, ohne dass man nachfragen muss.
Antworten Top
#4
Hallo,

nur zwei Fragen noch, bevor man sich am Ende sinnlose Mühe macht. Wäre eine VBA-Lösung in Ordnung? Und: Deinen Tabellenaufbau finde ich nicht optimal, wäre eine Umgestaltung von eben diesem ok?
Gruß Jonas
Antworten Top
#5
Hallo,

vor einiger Zeit gab es schon einmal die Frage nach zufälliger Zuordnung für einen Spielplan. Mein Argument war damals, es ist besser eine Reihenfolge zu definieren.

Der folgende Code erstellt die Reihenfolge der Eltern für das "Kampfgericht" und sollte für eine variable Anzahl von Spielen und Eltern funktionieren. Es wird ebenfalls die Anzahl der Einsätze gezählt, um für die anderen Einsätze die Eltern mit dem geringsten Einsatz bestimmen zu können.


Code:
Sub Fen()
'Gericht
Const Heimspiel As Integer = 20 ' bei Bedarf ändern
k = 1 'Kampgericht bei Heimspiel
Dim KG As Object
Set KG = CreateObject("system.collections.arraylist")

lr = Cells(Rows.Count, "A").End(xlUp).Row

For Each c In Range("B2:B" & lr)
   If c = "ja" Then KG.Add Array(c.Row, "M")
Next c
For Each c In Range("C2:C" & lr)
   If c = "ja" Then KG.Add Array(c.Row, "V")
Next c

Debug.Print KG.Count ', Join(KG.toarray, ", ")
For i = 5 To 4 + Heimspiel
   kk = (k - 1) Mod (KG.Count)
   Cells(KG.Item(kk)(0), 4 + k) = "KG: " & KG.Item(kk)(1)
   k = k + 1
   Cells(KG.Item(kk)(0), 4) = Cells(KG.Item(kk)(0), 4) + 1
Next i
End Sub


Eine Datenstruktur mit in der begefügten Datei ist nötig.

mfg

(Makros müssen im "Trust-Center" zugelassen werden)
(es wa etwas komplizierter, als ich am Anfang erwartet hatte)


Angehängte Dateien
.xlsm   Spielplan.xlsm (Größe: 28,07 KB / Downloads: 8)
Antworten Top
#6
(14.05.2017, 13:45)Jonas0806 schrieb: Hallo,

nur zwei Fragen noch, bevor man sich am Ende sinnlose Mühe macht. Wäre eine VBA-Lösung in Ordnung? Und: Deinen Tabellenaufbau finde ich nicht optimal, wäre eine Umgestaltung von eben diesem ok?
Hi Jonas,
eine VBA wäre ok und ich denke auch am sinnvollsten. Und wenn der Tabellenaufbau verbessert werden kann, dann gerne.

Grüße
Uwe
Antworten Top
#7
(14.05.2017, 16:30)Fennek schrieb: Hallo,

vor einiger Zeit gab es schon einmal die Frage nach zufälliger Zuordnung für einen Spielplan. Mein Argument war damals, es ist besser eine Reihenfolge zu definieren.

Der folgende Code erstellt die Reihenfolge der Eltern für das "Kampfgericht" und sollte für eine variable Anzahl von Spielen und Eltern funktionieren. Es wird ebenfalls die Anzahl der Einsätze gezählt, um für die anderen Einsätze die Eltern mit dem geringsten Einsatz bestimmen zu können.


Code:
Sub Fen()
'Gericht
Const Heimspiel As Integer = 20 ' bei Bedarf ändern
k = 1 'Kampgericht bei Heimspiel
Dim KG As Object
Set KG = CreateObject("system.collections.arraylist")

lr = Cells(Rows.Count, "A").End(xlUp).Row

For Each c In Range("B2:B" & lr)
   If c = "ja" Then KG.Add Array(c.Row, "M")
Next c
For Each c In Range("C2:C" & lr)
   If c = "ja" Then KG.Add Array(c.Row, "V")
Next c

Debug.Print KG.Count ', Join(KG.toarray, ", ")
For i = 5 To 4 + Heimspiel
   kk = (k - 1) Mod (KG.Count)
   Cells(KG.Item(kk)(0), 4 + k) = "KG: " & KG.Item(kk)(1)
   k = k + 1
   Cells(KG.Item(kk)(0), 4) = Cells(KG.Item(kk)(0), 4) + 1
Next i
End Sub


Eine Datenstruktur mit in der begefügten Datei ist nötig.

mfg

(Makros müssen im "Trust-Center" zugelassen werden)
(es wa etwas komplizierter, als ich am Anfang erwartet hatte)
Hallo,

leider bekomme ich beim Ausführen folgen Fehler angezeigt.
Fehler 11


Code:
Sub Fen()
'Gericht
Const Heimspiel As Integer = 20 ' bei Bedarf ändern
k = 1 'Kampgericht bei Heimspiel
Dim KG As Object
Set KG = CreateObject("system.collections.arraylist")
lr = Cells(Rows.Count, "A").End(xlUp).Row
'For i = 2 To lr
    'If Cells(i, "B") = "ja" Or Cells(i, "C") = "ja" Then KG.Add i
'Next i
For Each c In Range("B2:B" & lr)
    If c = "ja" Then KG.Add Array(c.Row, "M")
Next c
For Each c In Range("C2:C" & lr)
    If c = "ja" Then KG.Add Array(c.Row, "V")
Next c
Debug.Print KG.Count ', Join(KG.toarray, ", ")
For i = 5 To 4 + Heimspiel
kk = (k - 1) Mod (KG.Count)   Diese Zeile ist gelb markiert
    Cells(KG.Item(kk)(0), 4 + k) = "KG: " & KG.Item(kk)(1)
    k = k + 1
    Cells(KG.Item(kk)(0), 4) = Cells(KG.Item(kk)(0), 4) + 1
Next i
End Sub
Antworten Top
#8
Hi Uwe,

du musst nicht immer alles zitieren. Benutze doch bitte den Antwortbutton unterhalb des Formularfeldes. Bei einem notwendigen Zitat achte bitte darauf, dass deine Antwort außerhalb des Zitats liegt.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#9
OK, danke für die Info.

LG
Uwe
Antworten Top
#10
Hallo,

hier ein Code für die Heimspiele mit "altem" VBA. Es gibt zwei Auswertungen, wie oft die Eltern bestimmte Aufgaben übernehmen müssen:


Code:
Sub R_Find()

lr = Cells(Rows.Count, "A").End(xlUp).Row
With Range("B1:C" & lr)
       Set rng = .Find("ja", , , , xlColumns)
   For j = 1 To Heimspiel
       Cells(rng.Row, 4) = Cells(rng.Row, 4) + 1
       Cells(rng.Row, 4 + j) = "KG: " & IIf(rng.Column = 2, "M", "V")
       Set rng = .FindNext(rng)
     
   Next j
End With

LL = Array("Trikot", "10 1/2 Bröt.", "Laugeng.", "Kuchen")
lr = Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Range("D1:D" & lr)
y = rng.Replace("", 0)
For Each L In LL
   For j = 1 To Heimspiel
       F = WorksheetFunction.Min(rng)
       R = WorksheetFunction.Match(F, rng, 0)
       Cells(R, 4 + j) = L
       Cells(R, 4) = Cells(R, 4) + 1
   Next j
Next L
End Sub
 
Anbei wieder die Datei.

mfg

(falls Fehler auftreten, bitte im Code markieren, die Fehlernr. recht nicht)


Angehängte Dateien
.xlsm   Spielplan.xlsm (Größe: 31,52 KB / Downloads: 3)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste