Automatische sortierung der Tische
#81
Hallo Gast123,

bisher bin ich von 4*19 Spielern ausgegangen und nicht von 140.

Morgen werde ich die Makros testen.

mfg

PS: das ist der Vorteil von teamwork, viele Ideen treffen aufeinander
Top
#82
Hallo,

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

Range("X1").Offset(i, 1) = Range("X1").Offset(i, 1) & ";"
Range("X1").Offset(i, 1) = Replace(Range("X1").Offset(i, 1), ";" & i & ";", ";")
Range("X1").Offset(i, 1) = Replace(Range("X1").Offset(i, 1), ";;", ";")
Range("X1").Offset(i, 1) = Left(Range("X1").Offset(i, 1), Len(Range("X1").Offset(i, 1)) - 1)
Range("X1").Offset(i, 1) = Right(Range("X1").Offset(i, 1), Len(Range("X1").Offset(i, 1)) - 1)
'Stop

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


und nocheinmal als Datei.

mfg


Angehängte Dateien
.xlsm   Tische zuordnen.xlsm (Größe: 25,85 KB / Downloads: 5)
Top
#83
Hallo Fennek,

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???

mfg  Gast 123
Top
#84
(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.





Top
#85
Hallo Ego

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
Top
#86
Hallo Gast123,

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.





Top
#87
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 Smile 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.

Gruss
Rabe
Top
#88
Hallo Rabe 79

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.

mfg  Gast 123
Top
#89
Nachtrag:

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!
Top
#90
Hi Gast,
 
Nein nein bin nicht weg Smile
Gibt ja noch vielleicht eine komplette Lösung Wink
 
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.

Gruß
Rabe


Angehängte Dateien
.xlsm   Auslosung Tische.xlsm (Größe: 85,3 KB / Downloads: 3)
Top


Gehe zu:


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