AW: Paarungen ohne Wiederholungen
01.09.2021 16:52:40
Daniel
Hi
noch ne Variante, die Dopplungen ausschließt und das bei einfachem Code.
die erste Runde wird rein zufällig ermittelt, die folgenden dann durch den Ringtausch wie in der Turnhalle: die Paare stehen sich gegenüber.
für die nächste Runde rutscht dann die linke Seite um eins nach oben und die rechte um eins nach unten und an Enden wird die Seite getauscht.
Allerdings brauchst du mindestens doppelt so viele Teilnehmer wie Runden gespielt werden:
Sub SpielePaarung2()
Dim anz As Long
Dim anz2 As Long
Dim i As Long, sp As Long
Dim arr, arr2, x, y
anz = WorksheetFunction.CountA(Columns(1))
ReDim arr(1 To anz)
'--- Teilnehmer einlesen
For i = 1 To anz
arr(i) = Cells(2 + i - 1, 1).Value
Next
'--- zufällige Anordnung erzeugen
For i = 1 To anz
x = arr(i)
y = WorksheetFunction.RandBetween(1, UBound(arr))
arr(i) = arr(y)
arr(y) = x
Next
anz2 = WorksheetFunction.RoundUp(anz / 2, 0)
ReDim arr2(1 To anz2, 1 To 2)
'--- Paarung erste Runde, obere Hälfte gegen untere Hälfte
For i = 1 To anz
arr2(((i - 1) Mod anz2) + 1, WorksheetFunction.RoundUp(i / anz2, 0)) = arr(i)
Next
Cells(3, 4).Resize(anz2, 2) = arr2
'--- weitere Runden durch Ringtausch
For sp = 2 To 6
y = arr2(1, 2)
x = arr2(anz2, 1)
For i = 1 To anz2 - 1
arr2(i, 2) = arr2(i + 1, 2)
Next
arr2(anz2, 2) = x
For i = anz2 To 2 Step -1
arr2(i, 1) = arr2(i - 1, 1)
Next
arr2(1, 1) = y
Cells(3, (sp - 1) * 3 + 4).Resize(anz2, 2) = arr2
Next
End Sub
Gruß Daniel