die Testprezedur von Gast123 mit verschiedenen Code für jeden Vorschlag erschien mir etwas unübersichtlich. Anbei noch einmal mein (2.) Vorschlag mit 3 Testprozeduren für "keine 2 Spieler eines Teams oder Vereins" und "wer-mit-wem" einschließlich der Such nach Doppelten.
Wenn die Ranges der Runden angepaßt werden, sollte der Code direkt auf alle Vorschläge übertragbar sein.
Hier der Code:
Code:
Sub Testen() 'Zuordnen des Team-Buchstabens For i = 2 To 20 For j = 7 To 22 Team = Int((Cells(i, j) - 1) / 4) + 1 B = Chr(64 + Team) Cells(i + 24, j) = B & Cells(i, j) Next j Next i End Sub
Sub Farbtest() 'Test auf Spieler des selben Team oder selben Vereins Dim RNG As Range Set RNG = Range("G26:V44") For i = 65 To 83 RNG.Interior.Color = xlNone For Each c In RNG If Left(c, 1) = Chr(i) Or Left(c, 1) = Chr(i + 1) Then c.Interior.Color = vbYellow Next c Stop Next i End Sub
Sub wer_mit_wem() 'Ausgabe ins Direkt-Fensters der VBA-Editors
Dim Anz As Integer 'Anzahl der Spieler Dim RNG As Range Anz = 76 Range("Y2:Y100").Clear Runde = Array("G1:J40", "K2:N40", "O2:R40", "S2:V40") 'Ranges der 4 Rundes
For i = 1 To Anz For Each Ru In Runde Set RNG = Range(Ru) For Each R In RNG.Rows If Not IsError(Application.Match(i, R, 0)) Then Range("X1").Offset(i, 0) = i Range("X1").Offset(i, 1) = Range("X1").Offset(i, 1) & ";" & Join(Application.Transpose(Application.Transpose(R)), ";") End If Next R Next Ru
Next i Stop 'suche nach doppelten For i = 1 To Anz T = Cells(i + 1, "Y") Tx = Split(T, ";") For Each j In Tx q = InStr(1, T, ";" & j & ";") q = InStr(q + 1, T, ";" & j & ";") If j <> "" And q <> 0 Then Debug.Print i, j, q End If Next j Next i End Sub
ich habe mir deine Datei heruntergeladen und muss sie mir noch mal in Rueh ansehen.
In einer Hinsicht reden wir glaube ich aneinander vorbei. Das war bisher bei allen Anfragen gewünscht. Ich bin in drei Thread an diesem Problem gescheitert: keine doppelten Spieler über -alle Runden-
Du hast Recht das es keine doppelten Speiler in einer Runde gibt. Sehe ich mir die 1. Zeile an sehe ich auf Anhieb das die Nr 1 mit 39 in der 1. Runde spielt, und mit 38 in der 2. Runde. Gleiches Team !! In der 2. + 3. Runde wieder die Nr 1 mit Spieler 56 und 54. Gleiches Team, Kennbuchstabe "N"
in deiner Liste wer mit wem sehe ich in der 1. Zeile Speiler 1 mit: 20;39;58;38;56;74;37;54;71;36;52;68 Wie bitte kannst du bei einer fortlaufenden Index Nummer erkennen zu welchem Team die gehören ??? Deshalb habe ich mir die Mühe gemacht und einen eindeutigen ID-Code bestehend aus Buchstaben A-Z und die Nr 1-4 für Speiler 1-4 vergeben. Ich sehe somit sofort welcher Speiler zu welchem Team gehört. Damit kann ich auch im Prüfprogramm nach den Buchstaben für die Teamzugehörigkeit suchen.
Vielleicht ist meine Prüfmethode am Anfang sehr verwirrend, blickt man vielleicht nicht sofort durch welcher Sinn dahinter steckt. Mein Vergleich geht nun mal konsequent über alle Speiler, alle Runden an allen Tischen Man erkennt dabei wie schwierig es ist diese Bedinung zu erfüllen. Ein Optimum an Durchmischen erreichen.
Üer eine Lösung denke ich immer noch nach. Bei einer elektronischen Orgel habe ich frei Jahre lang nach einem Fehler gesucht. Sie ist siebenmal umgetauscht worden. 2 Tage vor Heiligabend fand ich ihn endlich. Ein defekter 2MOhm Widerstand für 7 Pfennig Einkauf. 3 jahre lang hatte uns das Diing genervt.
Das ich an dem Tehma dran bleibe hat mit diesem Thread nichts zu tun. Solche Anfragen sind bisher in drei Forums aufgetaucht, die kommen immer wieder. Nur eine richtig gute Lösung gibt es bisher nicht !!
Mein Ziel ist es -keine doppelten- über alle Runden zu ereichen. Schauen wir wie weit ich komme???
(24.07.2016, 00:01)Gast 123 schrieb: Das ich an dem Tehma dran bleibe hat mit diesem Thread nichts zu tun. Solche Anfragen sind bisher in drei Forums aufgetaucht, die kommen immer wieder. Nur eine richtig gute Lösung gibt es bisher nicht !!
Mein Ziel ist es -keine doppelten- über alle Runden zu ereichen. Schauen wir wie weit ich komme???
Hallo Gast,
um dir die Arbeit ein wenig zu erleichtern, lies doch bitte einmal die vorhergenden Texte.
Fennek, Edgar, SNB und ich sagen, dass Fenneks Lösung die Bedingungen erfüllen. Also auch keine doppelten über alle vier Runden.
Voraussetzung ist natürlich, das die Nummern der Teilnehmer einer Mannschaft und eines Vereins direkt hintereinander liegen.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Zitat:Du hast Recht das es keine doppelten Speiler in einer Runde gibt. Sehe ich mir die 1. Zeile an sehe ich auf Anhieb das die Nr 1 mit 39 in der 1. Runde spielt, und mit 38 in der 2. Runde. Gleiches Team !! In der 2. + 3. Runde wieder die Nr 1 mit Spieler 56 und 54. Gleiches Team, Kennbuchstabe "N"
in meiner Antwort habe ich doch eindeutig geschrieben das man schon in der 1 Zeile doppelte sieht. Spieler 38 und 39 gehören zum gleichen Team,, und spielen gegen Spieler 1. Ebenso Nr 56 + 54 gehören zum gleichen Team, Kennbuchstabe "N". Wieso seht ihr darin keine doppelte als Team?? Verstehe ich nicht so ganz, es sind doch die exakten Daten aus Fennek seiner Beispieldatei. Völlig untergegangen ist, das es auch von Edgar einen Lösungsvorschlag gibt der Rabe gefaellt.
Solange man Überschneidungen durch exaktes Sichten der Tabelle erkennen kann gibt es keine perfekte Lösung. Bestenfalls gute Lösungen mit denen man Leben kann, oder muss. Perfekt ist für mich etwas anderes. Aber darüber kann man lange streiten .... Übrigens, mal ganz in Ruhe und sachlich. Wie gut ein Programm war weiss man nach dem Turnier. Wenn es Überschneidungen gab, Spieler doppelt am Tisch sassen, wird anschliessend "gemeckert" Dann weiss man ganz genau wie gut oder schlecht ein Programm war. Hier können wir lang und breit diskutieren. Die Wahrheit kommt immer in der Praxis heraus !! Das warte ich gelassen ab. mfg Gast 123
im zweiten Kriterium wurde "nur" gefordert, dass :
ein Spieler nicht gegen einen Gegner antreten soll, gegen den er selbst schon einmal gespielt hat.
Es wurde nicht gefordert, dass:
ein Spieler nicht gegen einen Gegner antreten soll, wenn er gegen eines seinens Mannschaftkammeraden schon einmal gespielt hat.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Hallo zusammen, Wenn es doch eine Lösung gibt kann man diese auch in ein Makro umsetzen? für die 32 Teams ?. Vielleicht ist die Frage was blöde aber wie schon erwähnt habe ich leider nur Grundkenntnisse. @Edgar : Das stimmt es ist egal wenn ein anderes Mitglied aus einem Team schon gegen einen bestimmt Spieler gespielt hat. ( es darf dann nur nocht wieder der gleiche gegen diesen spieler spielen ) Würden denn dann die anderen Anforderungen erfüllt? Dann wäre es ja perfekt. Die Anforderung war das:
1. man nie gegen einen Spieler aus seinem Team spielt 2. nie gegen den selben Spieler in Runde eins bis vier spielt 3. man nie gegen eine zweite Mannschaft spielt.
ich dachte du waerst schon aus dem Thread raus, schön das du dich noch mal meldest. Ich habe vielleicht eine echte Überraschung für dich, ein Makro das alle Forderungen erfüllt. Es setzt aber zwingend voraus das es -Korrekturen von Hand gibt- Daran arbeite ich gerade!
Es ist mir wahrscheinlch gelungen alle Teams -ohne Überschneidung- bis auf die 19 Zeile zu verteilen. In der letzten, egal ob 19 oder 32, wird es doppelte geben. Dort ist der Zufallsgenerator -technisch- am Ende. Ich müsste Durchlaeufe von 100.000 bis über 1 Million akzeptieren für die perfekte Lösung. Das ist unsinnig, dauert Stunden, irgendwo muss man den Generator beenden.
Bleiben aber nur 2-4 Spieler übrig, die doppelt antreten, kann man sie in der Tabelle ja leicht von Hand gegen andere auswechseln. Daran arbeite ich gerade. Aber das Makro gebe ich nicht öffentlich preis !! Wenn mir der Cou gelingt, ist und bleibt diese Idee, diese Umsetzung, meine persönliche Arbeit.
Ich brauche aber 1-2 Tage Zeit bis alles so laeuft wie ich das haben will. (muss noch privates erledigen) Sofern Interesse besteht bitte in Ruhe abwarten bis ich mich melde.
meine Aufgabe ist es zuerst einmal per Zufallsgenerator die Spieler und Teamliste zu erstellen. mit allen Prüfungen und Unterstützung beim Auswechseln der doppelten von Hand.
Was ich bitte brauche ist eine kleine Datei wie das Ergebnis aussehen soll. In welcher Tabelle (mit Namen) die Spieler aufgelistet werden sollen, wie sie aufgelistet werden sollen, wie die ganzeTabelle aussehen soll, damit ihr sie bequem Beamen könnt. Damit habe ich noch nie gearbeitet, da habe ich garkeine Ahnung wie das aussehen muss.
Ich bitte also um eine kleine Tabelle wie die Lösung aussehen soll. Den Rest mache ich per Makro. Ohne Angaben von Spalten und Zeilen und wie es optisch aussehen soll kann ich es nicht machen!
Nein nein bin nicht weg Gibt ja noch vielleicht eine komplette Lösung
So wie die Datei im Anhang würde ich das dann brauchen.
Habe Bedingte Formatierungen über die Auslosung gelegt. So sehe ich halt ob Spieler der gleichen Mannschaften am Tisch sitzen. (Die werden dann Rot angezeigt) Habe auch mal die Erste und zweite Mannschaft farblich markiert um zu erkennen wie oft diese gegeneinander spielen.
Ob Spieler gegeneinander gespielt haben kann ich leider hier nicht erkennen oder nur mit viel Aufwand.
In der Prüfung wird halt nur abgefragt ob jeder Spieler einmal pro Runde da ist. Das gleiche mit den Mannschaften.