Automatische sortierung der Tische
#61
Hallo Gast123,

nur der Vollständigkeit halber:


Code:
Edgar hat inzwischen ein Makro entwickelt das sogar bis 32 Teilnehmer zulaesst.

auch 50 und mehr.

Zitat:laeuft nicht in 2003

in der vorliegenden Form nicht, aber nur wegen dieser Zeile:


Code:
Range("H:ZZ").ClearContents

Ändere Sie so ab:


Code:
Range("H:BA").ClearContents

Irritiert mich bei Deinen sonstigen Ausführungen etwas, dass Du das nicht gemerkt hast.  :s Huh
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#62
Hallo,

es ist sehr gut ein so ausgefeilten Prüfprogramm zu nutzen.

Frage: In der Datei "Tische prüfen.xlsm" sind die Ergebnisse meines ersten Versuchs berücksichtigt, der offensichtlich "Mist" war. Ist es möglich, den Test auch für den zweiten Versuch durchzuführen? (Beitrag #39)

mfg
Top
#63
Hallo,

für die Prüfung, ob alle Spieler eingetragen sind und keiner doppelt vorhanden genügt eine bedingte Formatierung:

[html]
Arbeitsblatt mit dem Namen 'Tabelle1'
 BCD
11Alte SäckeGerhard Pfeifer
22Alte SäckeIngo Mergner
33Alte SäckeJürgen Käsebrink
44Alte SäckeMax Mustermann

Zellebedingte Formatierung...Format
D11: =ZÄHLENWENN($S$2:$AA$51;$D1)>1abc
D12: =ZÄHLENWENN($S$2:$AA$51;$D1)=0abc
D13: =ZÄHLENWENN($J$2:$Q$51;$D1)=0abc
D14: =ZÄHLENWENN($J$2:$Q$51;$D1)>1abc
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
[/html]

@Fennek,

Deine zweite Version (#39) ist zwar etwas ausgereifter, aber berechenbar. Vom Zufallsprinzip ist das meilenweit entfernt.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#64
Hallo Gast123

warum die Prüfung? Es gab in der Anfrage zwei Kriterien.


1. An einem Tisch darf keiner aus der gleichen Mannschaft oder dem zweiten Team sitzen.
2. In Runde 1 bis 4 darf sollte jeder Spieler immer andere Leute am Tisch haben.

Edgar hat doch im Laufe der Zeit geschrieben, dass sein Programm beide Bedingungen nicht erfüllt (weniger als kaum eine).
In Fenneks zweitem Versuch sieht man sofort, dass ab 8 Mannschaften -vorher geht es nicht- beide Bedingungen erfüllt sind.

Lieber eine einfache richtige Lösung, als eine komplizierte falsche.

@Edgar: Von zufällig war in der Anfrage keine Rede.
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
#65
Hallo ego,



Zitat:In Runde 1 bis 4 darf sollte jeder Spieler immer andere Leute am Tisch haben.

kein muß, also erfüllt.

Kein Spieler aus gleicher Mannschaft (1+2) ist zumindest nach dem kompletten Zufallsprinzip, kaum realisierbar (mit einfachen Mitteln).

Machbar ist folgendes:

1. Die Spieler werden blockweise an die Tische verteilt.
2. Erste und zweite Mannschaft gehören zum gleichen Block.

Dann könnte man nach dem Zufallsprinzip die Blöcke auslosen. Alerdings könnte es dann, bei einer nicht durch 4 teilbaren Zahl von Mannschaften, dazu kommen, dass zwei Spieler einer Mannschaft am gleichen Tisch landen. Könnte man mit etwas Programmieraufwand aber auch lösen.

Hier mal ein Ansatz:


Code:
Option Explicit

Sub auslosen()
Dim arrPlatz1 As Variant
Dim arrPlatz2 As Variant
Dim arrPlatz3 As Variant
Dim arrPlatz4 As Variant
Dim loZahl2 As Long
Dim LoAnz As Long
Dim loA As Long
Dim loB As Long
Dim loRunde
Dim vx1
Dim vx2
Dim vx3
Dim vx4
LoAnz = InputBox("Wieviel Mannschaften?") * 1

Range("I:BA").ClearContents
For loRunde = 1 To 4
    loB = 0
    Randomize
    Do
        loZahl2 = Application.WorksheetFunction.RandBetween(1, LoAnz)
            If InStr(arrPlatz1, Format(loZahl2, "000")) = 0 Then
                arrPlatz1 = Format(loZahl2, "000") & " " & arrPlatz1
                loB = loB + 1
            End If
    Loop Until loB > LoAnz - 1
    loB = 0
    Randomize
    Do
        loZahl2 = Application.WorksheetFunction.RandBetween(LoAnz + 1, LoAnz * 2)
            If InStr(arrPlatz2, Format(loZahl2, "000")) = 0 Then
                arrPlatz2 = Format(loZahl2, "000") & " " & arrPlatz2
                loB = loB + 1
            End If
    Loop Until loB > LoAnz - 1
    loB = 0
    Randomize
    Do
        loZahl2 = Application.WorksheetFunction.RandBetween(LoAnz * 2 + 1, LoAnz * 3)
            If InStr(arrPlatz3, Format(loZahl2, "000")) = 0 Then
                arrPlatz3 = Format(loZahl2, "000") & " " & arrPlatz3
                loB = loB + 1
            End If
    Loop Until loB > LoAnz - 1
    loB = 0
    Randomize
    Do
        loZahl2 = Application.WorksheetFunction.RandBetween(LoAnz * 3 + 1, LoAnz * 4)
            If InStr(arrPlatz4, Format(loZahl2, "000")) = 0 Then
                arrPlatz4 = Format(loZahl2, "000") & " " & arrPlatz4
                loB = loB + 1
            End If
    Loop Until loB > LoAnz - 1

    Cells(1, 9 + (loRunde - 1) * 6) = "Runde " & loRunde
    
    vx1 = Split(arrPlatz1, " ")
    vx2 = Split(arrPlatz2, " ")
    vx3 = Split(arrPlatz3, " ")
    vx4 = Split(arrPlatz4, " ")
    For loA = 3 To LoAnz + 2
        Cells(loA, 9 + (loRunde - 1) * 6) = "Tisch " & loA - 2
        Cells(loA, 10 + (loRunde - 1) * 6) = vx1(loA - 3)
        Cells(loA, 11 + (loRunde - 1) * 6) = vx2(loA - 3)
        Cells(loA, 12 + (loRunde - 1) * 6) = vx3(loA - 3)
        Cells(loA, 13 + (loRunde - 1) * 6) = vx4(loA - 3)
    Next
    arrPlatz1 = ""
    arrPlatz2 = ""
    arrPlatz3 = ""
    arrPlatz4 = ""
Next
End Sub
Das Makro fußt auf der Tabelle von Fennek!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#66
(18.07.2016, 16:07)Rabe79 schrieb: Folgende Kriterien sollen berücksichtigt werden.
 
1.       An einem Tisch darf keiner aus der gleichen Mannschaft oder dem zweiten Team sitzen.
2.       In Runde 1 bis 4 darf sollte jeder Spieler immer andere Leute am Tisch haben.
Man sollte also wenn man in Runde 1 gegen Max Mustermann gespielt hat dies nicht wieder in Runde 2,3 oder 4 tun.

Hallo Edgar,

nichts für ungut.

Aber hier die Kriterien einschliessliche der Erkärung der zweiten.
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
#67
@Edgar :verstehe ich das nun richtig das es bis jetzt reines glück war das kein Spieler aus dem gleich team am tisch sitzt ?

Das das mit den zweiten mannschaften nicht erfüllt wird,
und das man in vier runden nicht gegen einen spielen darf gegen den ich schonmal gespielt habe war mir klar.

Gruß
Rabe
Top
#68
Hey,   "i bin wieder do..."

in meiner Prüfdatei waren noch ein paar kleine Fehler, ich habe sie korrigiert.

@ Edgar,  dein Prüfergebnis sieht jetzt viel besser aus, Sorry, war ein dummer Fehler.
    Der ID-Code ist bei dir 2stellig, verglichen habe ich aber mit Left(AC,1) = 1stellig !!
    Das jetzige Ergebnis dürfte wirklich echt sein.  Sieht sehr gut aus ....
    Deinen Hinweis habe ich korrigiert auf Range("J:AZ")  Klappt trotzdem nicht in 2003

@ Fennek,  für dich habe ich etwas zum Speilen, ein Programm zum Auto-Ausfüllen mit Versatz.
    du kannst ja mal selbst schauen ob es einen Versatz gibt der zu einem guten Ergebnis führt ???

 @ Rabe,  im neuen Beispiel habe ich in Spalte L von Edgars Prüfung markiert was ich meine !!

In der 1. Prüfung ist kein doppelter Speiler zu sehen, Edgars Makro laeuft diesbezüglich sehr gut!
Die Tücke steckt aber im Detail, wenn man alle Speiler über alle Runden miteinander vergleicht !!
Den Zusammenhang das es dann doch doppelte gibt ist aus Edgars Teilnehmer Tabelle nicht
ersichtlich. Bei soviel Namen, soviel Tischen und über 4 Runden kann man diese Daten einfach
nicht sehen. Nur mit einem ID-Code, eine Kurzform für jeden Spieler, erkennt man die Prüfung!

In Spalte L steht der ID-Code  "AS1" für "alte Saecke" Spieler 1 = Gerhard Pfeifer
Er spielt in der 1. Runde gegen den Spieler Code "Te2", und in der 3. Runde, in Zeile 19 "Te2"  (gleicher Spieler)

Der ID-Code  "AS2" für "alte Saecke" Spieler 2 = Ingo Mergener
Er spielt in der 1. Runde gegen den Spieler"Tp3", und in der 4. Runde, gegen "Tp2"  = Team "Tp"
Er spielt in der 2. Runde gegen den Spieler"Tn4", und in der 3. Runde, gegen "Tn3"  = Team "Tn"
Hier wird also gleich zweimal gegen daselbe Team gespielt, nur gegen andere Team Spieler!

Diesen Zusammenhang kann man aus einer Teilnehmer Liste nicht erkennen, zu viele Daten um 
da durchblicken zu konnen. Mit dem Prüfprogramm über ID-Code ist das aber sofort ersichtlich.

Mein Programm ist ja keine Abwertung von Edgar seiner Arbeit. Ich sehe es eher als Möglichkeit 
sich selbst -Übersicht zu verschaffen-, und "doppelte" dann Manuell, von Hand zu korrigieren
 
Solange es kein Makro gibt das diese Aufgabe selbstaendig lösen kann bleibt nur dieser Weg 
durch Übersicht des IST Zustandes das ganze manuell nachbearbeiten. Das war meine Idee.
Den Gedanken es direkt durch ein Makro zu lösen haben ich noch nicht aufgegeben.

Brauche aber mal eine kleine "Denkpause".  Bearbeite zwischendurch einen anderen Thread.
  
mfg  Gast 123


Angehängte Dateien
.xlsm   Tische Prüfen 4.xlsm (Größe: 245,59 KB / Downloads: 3)
Top
#69
Hallo,

um Missverständnisse auszuräumen.

Wenn es die genial einfache Lösung von Fennek nicht gäbe (was erklärt warum man das Problem im Internet nicht findet) , könnte der Ansatz von Edgar sehr erfolgsversprechend sein.

Da mit seinem Programm in sehr kurzer Zeit sehr viele richtige Lösungen für eine Runde gefunden werden, in denen jeder nicht gegen Spieler der gleichen Mannschaft spielt, wäre es einen Versuch wert.

Kriterium 1 könnte man erfüllen, indem man nicht auf Mannschaften, sondern auf Vereine prüft.

  nicht "lozahl = Int((lozahl2 - 1) / 4) + 1" sondern "lozahl = Int((lozahl2 - 1) / 8) + 1" (bei riichtiger Aufstellung der Spielerliste)
Kriterium 2, indem man zusätzlich eine Liste mit Gegenspielern verwaltet und bei den hinteren Auslosung prüft.

Da zu erwarten ist, dass über Zufallszahlen nicht immer alle Bedingungen erfüllt sind, muss man Auslosungen verwerfen und wiederholen können.

Ob mit diesem Ansatz aber in Excel (langsam) in angemessener Zeit eine Lösung gefunden werden kann, kann ich nicht sagen.

Auf jeden Fall sollte das Programm eine Meldung ausgeben wenn keine gültige Lösung gefunden wurde.
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
#70
Hallo Gast123,

Ich verstehe nicht warum du Fennek Vorschläge machst seine Lösung zu überarbeiten.

Fenneks Lösung ist einfach, einfach richtig und daher einfach genial.
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


Gehe zu:


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