Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Auslosung von Spielpaarungen

Auslosung von Spielpaarungen
29.05.2006 21:57:18
Spielpaarungen
Im Archiv habe ich folgenden Beitrag gefunden:
Hallo Barthl,
trage in SpalteA die Spieler ein und lasse dieses Makro laufen.
Gruss Beni
Sub Spielpaarung() Range("D2:M100") = "" Range("A1:A70").Select Selection.Copy Range("B1").Select ActiveSheet.Paste Anzahl = 3 Team = Range("B" & Rows.Count).End(xlUp).Row / 2 For j = 2 To Anzahl For k = 1 To Team Range("B1:B70").Select Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _ xlTopToBottom leere_zeile = Range("B" & Rows.Count).End(xlUp).Row + 1 zzahl = Int((leere_zeile - 1 - 1 + 1) * Rnd + 1) Mname = Range("B" & zzahl) Range("B" & zzahl) = "" Range("C" & j).Select ActiveCell.Offset(0, k) = Mname Next k Next j Range("A1").Select End Sub
Wie muß das Script lauten, wenn in Spalte B zusätzlich der Verein steht?
Der Verein soll immer hinter dem Namen erscheinen.
Vielen Dank
Jürgen

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auslosung von Spielpaarungen
30.05.2006 11:51:24
Spielpaarungen
Hallo Jürgen,
meintest du das so?
 
 ABCDEFG
1Spieler1Verein1     
2Spieler2Verein1 Spieler59Verein6Spieler40Verein4
3Spieler3Verein1 Spieler7Verein1Spieler41Verein5
4Spieler4Verein1     
5Spieler5Verein1     
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Das entsteht mit Option Explicit Sub Auslosung2() Dim lngLast As Long, zz As Long, Anzahl As Integer, rr As Long Anzahl = 2 Columns("C:IV").Clear lngLast = Range("A" & Rows.Count).End(xlUp).Row Range(Cells(1, 1), Cells(lngLast, 2)).Copy Cells(1, 4) With Range(Cells(1, 6), Cells(lngLast, 6)) .Formula = "=RAND()" .Copy .PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False Application.CutCopyMode = False End With Cells(4, 1).Select Columns("D:F").Sort Key1:=Range("F1"), Order1:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption1:=xlSortNormal Cells(1, 1).Select For zz = 1 To lngLast Step Anzahl For rr = 0 To Anzahl - 1 Range(Cells(zz + rr, 4), Cells(zz + rr, 5)).Copy Cells(2 + rr, 6 + zz) Next rr Next zz Columns("D:F").Delete End Sub Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Auslosung von Spielpaarungen
30.05.2006 13:25:17
Spielpaarungen
Hallo Jürgen,
hab da auch mal rumgespielt, guckst du hier:
https://www.herber.de/bbs/user/33998.xls
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: Auslosung von Spielpaarungen
30.05.2006 17:54:01
Spielpaarungen
Hallo Erich,
das Script funktioniert prima.
Kann ich auch für eine Gruppenauslosung (8 Gruppen) verwenden.
Leider vergleicht es dann nicht die Vereine, so das mehrere aus einem Verein in der gleichen Gruppe sind.
Vielen Dank
Hallo Heiko,
dein Sript funktioniert bei mir leider nicht.
"Fehler beim Kompilieren:
Keine Zuweisung an Datenfeld möglich"
arrZufallsZahlen = fcnZufallZahlen(lngLastRow - 1)
Ich arbeite mit Office 97
Auch Dir Danke
Gruß
Jürgen
Anzeige
AW: Auslosung von Spielpaarungen
30.05.2006 22:14:14
Spielpaarungen
Hi,
lad mal was hoch, damit klar ist wie die Tabellenstruktur ist.
mfg Kurt
AW: Auslosung von Spielpaarungen
31.05.2006 17:29:38
Spielpaarungen
Hallo Jürgen,
die Aufteilung auf Gruppen unter der Bedingung, dass kein Verein mit mehr als einem Spieler
in einer Gruppe vertreten ist, machte es um einiges komplizierter (für mich).
Vielleicht hat ja noch jemand eine bessere Idee, auch ohne den Mangel,
der am Anfang der Prozedur steht...
Sub AuslosungGruppenVereine()
'              Mangel: Spieler aus den kleinen Vereinen sind nie in der selben Gruppe
'                      Mögliche Abhilfe: Nicht zeilenweise, sondern diagonal füllen
Dim lngLast As Long, zz As Long, ii As Integer, rg As Range, str As String
Dim Valt As String, intLast As Integer, gg As Integer, arrV() As Integer
Dim anzV As Integer, arrG() As Integer, minG As Integer, kk As Long
Const AnzGr = 8 ' Anzahl Gruppen (max. 125, mind. Spieleranzahl des größten Vereins)
' (z. B. mit AnzGr = Spieleranzahl / 2 werden Paare ermittelt)
Randomize
ReDim arrG(1 To AnzGr)
Columns("C:IV").Clear
lngLast = Range("A" & Rows.Count).End(xlUp).Row
str = "B1:B" & lngLast
anzV = Evaluate( _
"SUM(IF(" & str & "<>"""",MATCH(" & str & "," & str & ",0)=ROW(1:" & lngLast & "))*1)")
ReDim arrV(1 To anzV)
Range(Cells(1, 1), Cells(lngLast, 2)).Copy Cells(1, 4)
Columns("D:E").Sort Key1:=Range("E1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
For zz = 1 To lngLast
If Valt <> Cells(zz, 5) Then
Valt = Cells(zz, 5)
gg = gg + 1
End If
arrV(gg) = arrV(gg) + 1
If arrV(gg) > AnzGr Then
MsgBox Valt & " hat mehr Spieler als es Gruppen gibt!"
Exit Sub
End If
Next zz
gg = 0
For zz = 1 To lngLast
If Valt <> Cells(zz, 5) Then
Valt = Cells(zz, 5)
gg = gg + 1
End If
Cells(zz, 6) = arrV(gg)
Next zz
If lngLast > AnzGr * Int(lngLast / AnzGr) Then
For zz = lngLast + 1 To AnzGr * (Int(lngLast / AnzGr) + 1)
Cells(zz, 4) = "<kein>"
Cells(zz, 5) = "<FREI>"
Cells(zz, 6) = 999
Next zz
End If
lngLast = Range("D" & Rows.Count).End(xlUp).Row
Columns("D:F").Sort _
Key1:=Range("F1"), Order1:=xlDescending, _
Key2:=Range("E1"), Order2:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
gg = 0
Valt = ""
For zz = 1 To AnzGr
Cells(1, zz * 2 + 5) = "Gruppe " & zz
Next zz
For zz = 1 To lngLast
kk = 0
For ii = 1 To AnzGr
If arrG(ii) = minG And WorksheetFunction.CountIf _
(Columns(ii * 2 + 6), Cells(zz, 5)) = 0 Then kk = kk + 1
Next ii
ReDim arrV(1 To kk)
kk = 0
For ii = 1 To AnzGr
If arrG(ii) = minG And _
WorksheetFunction.CountIf(Columns(ii * 2 + 6), Cells(zz, 5)) = 0 Then
kk = kk + 1
arrV(kk) = ii
End If
Next ii
gg = arrV(Rnd * (kk - 1) + 1)
intLast = Cells(Rows.Count, gg * 2 + 5).End(xlUp).Row + 1
Range(Cells(zz, 4), Cells(zz, 5)).Copy Cells(intLast, gg * 2 + 5)
arrG(gg) = arrG(gg) + 1
minG = WorksheetFunction.Min(arrG)
Next zz
For Each rg In Range(Cells(2, 7), Cells(lngLast / AnzGr + 1, AnzGr * 2 + 5))
If rg = "<kein>" Then
rg = Cells(lngLast / AnzGr + 1, rg.Column)
rg.Offset(0, 1) = Cells(lngLast / AnzGr + 1, rg.Column + 1)
Cells(lngLast / AnzGr + 1, rg.Column).ClearContents
Cells(lngLast / AnzGr + 1, rg.Column + 1).ClearContents
End If
Next rg
Columns("D:F").Delete
End Sub
Viel Spaß damit!
Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Auslosung von Spielpaarungen
31.05.2006 22:18:15
Spielpaarungen
Hallo Erich,
danke für das Script, funktioniert prima.
Wiso ich beim sortieren eine Fehlermeldung erhalte weiß ich nicht, habe ich jedoch im Griff. Liegt möglich un der Office-Version.
Ich habe meine Testdaten in der Datei hochgeladen:
https://www.herber.de/bbs/user/34069.xls
Da ich mit anderen Spalten arbeiten, muß ich ein anderes Tabellenbalat für die Auslosung verwenden.
Wie kann ich mit einer Setzliste arbeiten?
Immer nur ein Spieler je Gruppe soll gesetzt werden (Pos1)
Nur ein Spieler je Verein/Gruppe funktioniert prima.
Vielen Dank
Jürgen
Anzeige
AW: Auslosung von Spielpaarungen
31.05.2006 22:18:37
Spielpaarungen
Hallo Erich,
danke für das Script, funktioniert prima.
Wiso ich beim sortieren eine Fehlermeldung erhalte weiß ich nicht, habe ich jedoch im Griff. Liegt möglich un der Office-Version.
Ich habe meine Testdaten in der Datei hochgeladen:
https://www.herber.de/bbs/user/34069.xls
Da ich mit anderen Spalten arbeiten, muß ich ein anderes Tabellenbalat für die Auslosung verwenden.
Wie kann ich mit einer Setzliste arbeiten?
Immer nur ein Spieler je Gruppe soll gesetzt werden (Pos1)
Nur ein Spieler je Verein/Gruppe funktioniert prima.
Vielen Dank
Jürgen
Anzeige
AW: Auslosung von Spielpaarungen
31.05.2006 22:19:05
Spielpaarungen
Hallo Erich,
danke für das Script, funktioniert prima.
Wiso ich beim sortieren eine Fehlermeldung erhalte weiß ich nicht, habe ich jedoch im Griff. Liegt möglich un der Office-Version.
Ich habe meine Testdaten in der Datei hochgeladen:
https://www.herber.de/bbs/user/34069.xls
Da ich mit anderen Spalten arbeiten, muß ich ein anderes Tabellenbalat für die Auslosung verwenden.
Wie kann ich mit einer Setzliste arbeiten?
Immer nur ein Spieler je Gruppe soll gesetzt werden (Pos1)
Nur ein Spieler je Verein/Gruppe funktioniert prima.
Vielen Dank
Jürgen
Anzeige
AW: Auslosung von Spielpaarungen
01.06.2006 12:40:45
Spielpaarungen
Hi Jürgen,
mit den 8 gesetzten Spielern klappt die Auslosung oft nicht im ersten Durchlauf.
Deshalb habe ich ein Makro davor gestellt, das die Auslosung in einer Schleife startet,
bis ein Ergebnis erzielt wurde:
Sub AuslosungStart()
Dim ii, fertig As Boolean
For ii = 1 To 50
AuslosungGruppenVereineGesetzt fertig
If fertig Then
'        MsgBox "Fertig beim " & ii & ". Durchlauf"
Exit For
End If
Next ii
If ii > 50 Then MsgBox "Neustart erforderlich - noch kein Ergebnis"
End Sub
Sub AuslosungGruppenVereineGesetzt(erg As Boolean)
'              Mangel: Spieler aus den kleinen Vereinen sind nie in der selben Gruppe
'                      Mögliche Abhilfe: Nicht zeilenweise, sondern diagonal füllen
Dim lngLast As Long, zz As Long, ii As Integer, rg As Range, str As String
Dim Valt As String, intLast As Integer, gg As Integer, arrV() As Integer
Dim anzV As Integer, arrG() As Integer, minG As Integer, kk As Long
Const AnzGr = 8 ' Anzahl Gruppen (max. 125, mind. Spieleranzahl des größten Vereins)
' (z. B. mit AnzGr = Spieleranzahl / 2 werden Paare ermittelt)
Randomize
ReDim arrG(1 To AnzGr)
Columns("J:IV").Clear
lngLast = Range("C" & Rows.Count).End(xlUp).Row
str = "C2:C" & lngLast
anzV = Evaluate( _
"SUM(IF(" & str & "<>"""",MATCH(" & str & "," & str & ",0)=ROW(1:" & lngLast - 1 & "))*1)")
ReDim arrV(1 To anzV)
For zz = 2 To lngLast
If IsEmpty(Cells(zz, "G")) Then
kk = kk + 1
Cells(kk, "K") = Cells(zz, "B")
Cells(kk, "L") = Cells(zz, "C")
Else
Cells(2, Cells(zz, "G") * 2 + 13) = Cells(zz, "B")
Cells(2, Cells(zz, "G") * 2 + 14) = Cells(zz, "C")
End If
Next zz
Columns("K:L").Sort Key1:=Range("L1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
lngLast = lngLast - 1
For zz = 1 To lngLast
If Valt <> Cells(zz, "L") Then
Valt = Cells(zz, "L")
gg = gg + 1
arrV(gg) = WorksheetFunction.CountIf(Columns("C"), Valt)
If arrV(gg) > AnzGr Then
MsgBox Valt & " hat mehr Spieler als es Gruppen gibt!"
Exit Sub
End If
End If
Next zz
gg = 0
lngLast = Range("L" & Rows.Count).End(xlUp).Row
For zz = 1 To lngLast
If Valt <> Cells(zz, "L") Then
Valt = Cells(zz, "L")
gg = gg + 1
End If
Cells(zz, "M") = arrV(gg)
Next zz
If lngLast > AnzGr * Int(lngLast / AnzGr) Then
For zz = lngLast + 1 To AnzGr * (Int(lngLast / AnzGr) + 1)
Cells(zz, "K") = "<kein>"
Cells(zz, "L") = "<FREI>"
Cells(zz, "M") = 999
Next zz
End If
Columns("K:M").Sort _
Key1:=Range("M1"), Order1:=xlDescending, _
Key2:=Range("L1"), Order2:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
gg = 0
Valt = ""
For zz = 1 To AnzGr
Cells(1, zz * 2 + 13) = "Gruppe " & zz
Next zz
For zz = 1 To lngLast
kk = 0
For ii = 1 To AnzGr
If arrG(ii) = minG And WorksheetFunction.CountIf _
(Columns(ii * 2 + 14), Cells(zz, "L")) = 0 Then kk = kk + 1
Next ii
On Error GoTo XEND
ReDim arrV(1 To kk)
On Error GoTo 0
kk = 0
For ii = 1 To AnzGr
If arrG(ii) = minG And WorksheetFunction.CountIf _
(Columns(ii * 2 + 14), Cells(zz, "L")) = 0 Then
kk = kk + 1
arrV(kk) = ii
End If
Next ii
gg = arrV(Rnd * (kk - 1) + 1)
intLast = Cells(Rows.Count, gg * 2 + 13).End(xlUp).Row + 1
Range(Cells(zz, "K"), Cells(zz, "L")).Copy Cells(intLast, gg * 2 + 13)
arrG(gg) = arrG(gg) + 1
minG = WorksheetFunction.Min(arrG)
Next zz
For Each rg In Range(Cells(2, "O"), Cells(lngLast / AnzGr + 1, AnzGr * 2 + 13))
If rg = "<kein>" Then
rg = Cells(lngLast / AnzGr + 1, rg.Column)
rg.Offset(0, 1) = Cells(lngLast / AnzGr + 1, rg.Column + 1)
Cells(lngLast / AnzGr + 1, rg.Column).ClearContents
Cells(lngLast / AnzGr + 1, rg.Column + 1).ClearContents
End If
Next rg
Rows(1).Font.Bold = True
zz = 2
While Not IsEmpty(Cells(zz, "O"))
Cells(zz, "J") = "Pos " & zz - 1
zz = zz + 1
Wend
Columns("K:N").Delete
erg = True
Exit Sub
XEND:
erg = False
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Auslosung von Spielpaarungen
01.06.2006 15:33:35
Spielpaarungen
Hallo Erich,
klappt prima !!!!
Ich habe nur etwas bei der Sortierung geändert, sonst stopt das Script bei mir.
https://www.herber.de/bbs/user/34081.xls
Was läst sich bei mehr Spielern/Verein als Gruppen machen ?
Gibt es eine Möglichkeit die Position in der Gruppe einzubeziehen ?
Falls nicht, kann ich mit leben !
Vielen Dank
Jürgen
AW: Auslosung von Spielpaarungen
01.06.2006 17:21:42
Spielpaarungen
Hallo Jürgen,
bei mehr Spielern/Verein als Gruppen müssten wohl zwangsläufig mindestens zwei Spieler eines Vereins
in der selben Gruppe landen. Das hattest du oben aber ausgeschlossen
(jedenfalls habe ich das Folgende so verstanden):
"Leider vergleicht es dann nicht die Vereine, so das mehrere aus einem Verein in der gleichen Gruppe sind."
Wäre eine Lösung, einen zu großen Verein XYZ vor der Auslosung
in zwei Teilvereine XYZ(a) und XYZ(b) aufzuteilen?
Die Korrektur beim Sort (Weglassen des Parameters "DataOption1:=xlSortNormal") ist nötig,
den Parameter gibts erst ab Excel 2002.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Auslosung von Spielpaarungen
05.06.2006 18:40:21
Spielpaarungen
Hallo Erich,
den Verein dann aufzuteilen war auch meine Idee.
Kommt nur sehr selten vor, wenn überhaupt. Daher ist Dein Script ideal für meine Zwecke.
Vielen Dank

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige