Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Paarungen ohne Wiederholungen

Forumthread: Paarungen ohne Wiederholungen

Paarungen ohne Wiederholungen
31.08.2021 12:31:40
Hermann
Hallo,
ich suche eine Möglichkeit aus einer Teilnehmerliste, bei der die Anzahl der Teilnehmer variieren kann, Paarungen für 6 Runden zu erzeugen. Die Anzahl der Paarungen muss sich nach der Anzahl der Spieler richten, d.h. je mehr Spieler, desto mehr Paarungen.
Die Paarungen dürfen sich nicht wiederholen.
Bei einer ungeraden Spieleranzahl darf sich der einzelne Spieler in den 6 Runden ebenfalls nicht wiederholen.
Habt ihr hierzu eine Lösung?
Danke im vorraus
https://www.herber.de/bbs/user/147848.xlsx
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Paarungen ohne Wiederholungen
31.08.2021 12:37:08
PawelPopolski
Werden die Paarungen zufällig ausgelost?
AW: Paarungen ohne Wiederholungen
31.08.2021 12:42:36
Hermann
Ja, die Paarungen werden zufällig ausgelost
AW: Paarungen ohne Wiederholungen
01.09.2021 00:00:35
Hermann
Hi, ich hab schon mal probiert und ein Makro eingefügt.
Soweit passt es ja.
Was ich noch nicht hinbekommen habe, ist, dass sich die Paarungen wiederholen und der einzelne übrige Spieler öfters vorkommt.
Diese Wiederholungen sollen nicht vorkommen.
Hat hier noch jemand eine Idee, wie man das lösen kann?
https://www.herber.de/bbs/user/147855.xlsm
Anzeige
AW: Paarungen ohne Wiederholungen
01.09.2021 20:05:34
Hermann
Hallo Peter,
funktioniert super, genauso hab ichs mir vorgestellt. Danke.
Hab nur noch eine Frage. Hab in der VBA gesehen, dass die Anzahl der Runden mit "Const MaxRunden = 6" eingetragen ist.
Kann die Anzahl der Runden auch über den Eintrag aus einer Zelle verwendet werden.
Dann könnte ich unterhalb der Buttons die gewünschte Anzahl der Runden eintragen und diese wird verwendet ohne dierkt in der VBA ändern zu müssen.
Danke schon mal.
Anzeige
AW: Paarungen ohne Wiederholungen
02.09.2021 07:30:35
Pierre
Hallo Hermann,
ich war mal so frei und habe bisschen rum gespielt, um dein Vorhaben zu realisieren (hauptsächlich, weil mich das selbst interessiert und ich mit sowas eigentlich keine Erfahrung habe).
Aber wenn ich auch anderen (also dir) damit helfen kann, warum nicht :)
Also, du musst das "Const MaxRunden = 6" austauschen durch "Dim MaxRunden As Variant"
Und dann zusätzlich vor dem "Application.ScreenUpdating = False" folgendes einfügen:
MaxRunden = Application.InputBox(prompt:="Bitte eine Zahl eingeben.", Title:="Eingabe Zahl", Default:=6, Type:=1)
Bei Default kannst du eine beliebige Zahl eintragen, die von vornherein als Vorgabe in der Inputbox stehen soll.
Gruß Pierre
PS: Das rattert einige Sekunden.
Anzeige
Nachtrag:
02.09.2021 07:51:25
Pierre
Noch was vergessen,
das Sub "Liste_leere()" musst du abändern:
Range("D3:AA100").ClearContents
Du musst den Bereich, der geleert werden soll, nach hinten erweitern, such dir eine Spalte aus, aber T würde nicht reichen, wenn du mehr als 6 Runden auslost.
Gruß Pierre
AW: Nachtrag:
02.09.2021 10:02:48
Hermann
Hallo Pierre,
jetzt bin ich happy.
Die Auslosung passt genau, und ich kann die zu spielenden Runden beim Ausführen eingeben.
Einsame Klasse, auch wenn sie bei mehreren Runden länger braucht.
Den Bereich im Sub "Liste_leere()" hab ich erweitert.
Vielen Dank nochmal für eure Hilfe
Anzeige
Bitteschön (owT)
02.09.2021 10:10:26
Pierre
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
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Paarungen ohne Wiederholungen in Excel


Schritt-für-Schritt-Anleitung

Um Paarungen ohne Wiederholungen in Excel zu erzeugen, kannst du folgende Schritte befolgen:

  1. Teilnehmerliste erstellen: Erstelle eine Liste der Teilnehmer in einer Excel-Tabelle. Achte darauf, die Liste in einer Spalte anzuordnen, z. B. in Spalte A.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  4. Makro einfügen: Kopiere und füge den folgenden VBA-Code in das Modul ein:

    Sub SpielePaarung()
       Dim anz As Long
       Dim i As Long
       Dim arr()
       anz = WorksheetFunction.CountA(Columns(1))
       ReDim arr(1 To anz)
    
       ' Teilnehmer einlesen
       For i = 1 To anz
           arr(i) = Cells(i + 1, 1).Value
       Next i
    
       ' Zufällige Anordnung erzeugen
       Call Zufallsanordnung(arr)
    
       ' Paarungen erstellen
       Call PaarungenErstellen(arr)
    End Sub
    
    Sub Zufallsanordnung(arr() As Variant)
       Dim i As Long, x As Variant, y As Long
       For i = 1 To UBound(arr)
           x = arr(i)
           y = WorksheetFunction.RandBetween(1, UBound(arr))
           arr(i) = arr(y)
           arr(y) = x
       Next i
    End Sub
    
    Sub PaarungenErstellen(arr() As Variant)
       Dim anz2 As Long, i As Long
       anz2 = WorksheetFunction.RoundUp(UBound(arr) / 2, 0)
       For i = 1 To UBound(arr)
           ' Hier kannst du die Logik für die Paarungen implementieren
       Next i
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle das Makro SpielePaarung aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Wiederholungen in den Paarungen: Stelle sicher, dass der Zufallsalgorithmus korrekt implementiert ist, um Wiederholungen zu vermeiden. Überprüfe den Code auf Fehler in der Zufallsanordnung.

  • Einzelner Spieler bleibt ohne Gegner: Wenn die Anzahl der Teilnehmer ungerade ist, musst du sicherstellen, dass es eine Regel gibt, die den einzelnen Spieler in den Runden berücksichtigt. Das kann durch "Freilosen" erfolgen.


Alternative Methoden

  • Schweizer System Excel: Wenn du ein Schweizer System für dein Turnier nutzen möchtest, kannst du nach Vorlagen suchen, die speziell für diese Art von Turnier erstellt wurden. Hierbei werden die Paarungen in jeder Runde auf Basis der bisher erzielten Ergebnisse erstellt.

  • Formel jeder gegen jeden: Eine einfache Methode, um alle möglichen Paarungen zu generieren, ist die Verwendung von Formeln in Excel. Du kannst die Formel =WENN(A2<>B2;A2&" vs "&B2;"") verwenden, um die Paarungen anzuzeigen.


Praktische Beispiele

  1. Tennis-Turnier: Wenn du einen Turnierplan Tennis jeder gegen jeden erstellen möchtest, kannst du ein Makro verwenden, das alle Spieler in einer Datenbank erfasst und die Paarungen für jede Runde generiert.

  2. VBA-Lösung für große Teilnehmerzahlen: Für eine große Teilnehmerzahl kannst du eine VBA-Lösung verwenden, die die Teilnehmer automatisch in Gruppen einteilt und die Paarungen über mehrere Runden hinweg organisiert.


Tipps für Profis

  • Automatisierung: Nutze die Möglichkeit, Eingabefelder für die Anzahl der Runden zu erstellen, sodass du diese bei Bedarf anpassen kannst, ohne den Code selbst zu ändern. Verwende dafür Application.InputBox.

  • Erweiterung des Datenbereichs: Stelle sicher, dass der Bereich in deinem Code, der die Ergebnisse löscht, groß genug ist, um alle möglichen Paarungen abzudecken.


FAQ: Häufige Fragen

1. Wie kann ich meine Teilnehmerliste in Excel erstellen?
Du kannst einfach eine Liste in einer Spalte anlegen und sicherstellen, dass jeder Teilnehmer in einer eigenen Zeile steht.

2. Wo finde ich Vorlagen für das Schweizer System in Excel?
Es gibt viele kostenlose und kostenpflichtige Vorlagen online. Eine Suche nach "Schweizer System Turnierplan Excel" wird dir viele Ergebnisse liefern.

3. Gibt es eine Excel-Formel für die Auslosung von Paarungen?
Ja, du kannst Formeln verwenden, um zufällige Paarungen zu erstellen. Ein Beispiel ist die Verwendung von RANDBETWEEN in Kombination mit der INDEX-Funktion.

4. Wie kann ich sicherstellen, dass sich die Paarungen nicht wiederholen?
Die Verwendung eines Zufallsalgorithmus in VBA oder die manuelle Verwaltung von Paarungen in einer Tabelle sind effektive Möglichkeiten, um dies zu erreichen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige