Spieler Auslosung (mit Freilose)

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Spieler Auslosung (mit Freilose) von: DaN
Geschrieben am: 09.04.2005 15:49:28

Hallo !
Ich habe mir einen Spieler Tunrierplan im Escel erstellt und nun hab ich ein Problem bei der Auslosung der Spieler (Wer gegen wehn) !

Ich habe eine Liste aller Spieler - Daneben hab ich eine Liste mit Zufallszahlen damit ich die Spieler Liste sortieren kann (das is meine Auslosung) !

Nun kann es aber vorkommen das man den Plan nicht voll bekommt. Der Plan ist z.B.: für 32 Spieler. Wenn nun aber nur 29 Teilnehmen, dann braucht man Freilose.
Diese Freilose sind fix gesetzt. Z.B.: Freilos 1 kommt immer an Position 1 der Spieler Liste. Freilos zwei kommt fix an Position 16 der Spieler Liste.
Wie kann ich meine Spieler Liste sortieren, so das er mir die Positionen für die Freilose frei lässt damit ich dort meine Freilose eintragen kann ?????

Die Anzahl der Freilose is leicht errechnet ... 32Plan - 29 Spieler = 3 Freilose !

DANKE im Vorraus !

Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: th.heinrich
Geschrieben am: 09.04.2005 17:00:30

hi Dan,

typische Glaskugelfrage. kein mensch ausser Dir weiss wie Du den turnierplan erstellst.

also auf gut glueck.

April
 AB
9spielerzufall
101Freilos1
1120,65369743
1240,17377143
1350,82058971
1460,22290055
1570,31759097
16 Freilos2
Formeln der Tabelle
B10 : =WENN(ANZAHL($A$10:$A$16)<7;"Freilos1";ZUFALLSZAHL())
B11 : =ZUFALLSZAHL()
B12 : =ZUFALLSZAHL()
B13 : =ZUFALLSZAHL()
B14 : =ZUFALLSZAHL()
B15 : =ZUFALLSZAHL()
B16 : =WENN(ANZAHL($A$10:$A$16)<7;"Freilos2";ZUFALLSZAHL())
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  


gruss thomas


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: DAN
Geschrieben am: 09.04.2005 18:03:53

Hallo Thomas !
Sorry das ich meine Frage nicht richtig formuliert habe, aber DU hast das schon ziemlich richtig verstanden !

Deine Lösung für mein Problem ist im Ansatz schon richtig ... DANK DIR !

Die Zufallszahl benötige ich damit ich die Spieler durch Zufall "auslosen" kann !
Wenn ich mit Deiner Lösung nach SpalteB sortieren würde dann würd das nicht funktionieren, da in manchen Feldern keine Zufallszahl drinn is !

Es müsste so laufen:

Ich habe 32 Felder für die Namen der Spieler. Daneben habe ich noch eine Spalte mit 32 Feldern in denen ich die Zufallszahl hinterlege.
Nun Sortiere ich die erste Spalte (mit den Spielernamen) nach der zweiten Spalte !
Nun sind meine Spieler "ausgelost". Nur habe ich 29 statt 32 Spieler.
Das Programm müsste das erkennen und nun gleich beim sortieren das gesetzte FELD 1 für ein Freilos freihalten und den ersten Spielernamen erst in die zweite Zeile schreiben.
Das gleiche gilt für das zweite Freilos das sich auf Position 16 befindet. Diese Position müsste das Programm auslassen und erst zeile 17 wieder mit einem Spielernamen befüllen.

Das war jetzt viel Text, aber ich hoffe es war verständlich !

Die Reihung der Lose würde ich auch in einer Tabelle ablegen:

Freilose Position
1 1
2 16
3 8
4 9

Bei 29 Spielern müsste das Programm nun Zeile 1,16,8,9 nach dem Sortieren mit Freilosen bestücken !

Gruß -Dan-


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: WernerB.
Geschrieben am: 10.04.2005 11:08:58

Hallo Dan,

da mir Dein Tabellenblatt nicht vorliegt, gelten für meinen Makrovorschlag folgende Voraussetzungen:

1. Die Spielernamen stehen lückenlos(!) im Zellbereich A1:A32; d.h., bei weniger als 32 Teilnehmern bleiben die letzten Zellen entsprechend ohne Inhalt.

2. Die von Dir vorgegebenen Zufallszahlen stehen im Zellbereich B1:B32.

3. Die Position(!) der Freilose steht im Zellbereich C1:C32; es muss gewährleistet sein, dass hier die Anzahl der Einträge ausreichend groß ist.

Wenn meine Annahmen nicht zutreffen, muss das Makro natürlich noch entsprechend angepasst werden.
Solltest Du dazu nicht selbst in der Lage sein, kannst Du Deine Datei (bitte nur ohne Makros!) hier hochladen; ich versuche dann ggf. die Anpassung für Dich vorzunehmen.

Sub Dan()
Dim laR As Long, _
    anzTe As Byte, anzFr As Byte, BlaIn As Byte, i As Byte
    Application.ScreenUpdating = False
    laR = Cells(Rows.Count, 1).End(xlUp).Row
    If laR > 32 Then
      MsgBox "Zu viele Teilnehmer gelistet !" & vbCr & vbCr & _
        "Makro-Abbruch !", vbOKOnly + vbCritical, _
        "Dezenter Hinweis für " & Application.UserName & ":"
      Exit Sub
    End If
    BlaIn = ActiveSheet.Index
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Range("A1:C32").Value = _
      Sheets(BlaIn).Range("A1:C32").Value
    Range("A1:B" & laR).Sort Key1:=Range("B1"), _
      Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, _
      MatchCase:=False, Orientation:=xlTopToBottom
    If laR < 32 Then
      Range("D1").Value = 1
      Range("D1").AutoFill Destination:=Range("D1:D32"), _
        Type:=xlFillSeries
      anzTe = laR
      anzFr = 32 - laR
      Range("C1:C" & anzFr).Sort Key1:=Range("C1"), _
        Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom
      For i = 1 To anzFr
        Cells(Range("C" & i).Value, 4).ClearContents
      Next i
      Range("D1:D32").Sort Key1:=Range("D1"), _
        Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom
      Range(Cells(anzTe + 1, 4), Cells(32, 4)).Value = _
        Range("C1:C" & anzFr).Value
      Range("B1:B32").Value = Range("D1:D32").Value
      Range("A1:B32").Sort Key1:=Range("B1"), _
        Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom
    End If
    Sheets(BlaIn).Range("A1:A32").Value = _
      ActiveSheet.Range("A1:A32").Value
    Application.DisplayAlerts = False
    Sheets(Sheets.Count).Delete
    Application.DisplayAlerts = True
    Sheets(BlaIn).Select
    Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.

P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: Dan
Geschrieben am: 11.04.2005 10:11:06

Hallo !
Danke für Deine Antwort ...

Das Script hat mir am Anfang gleich einen Fehler ausgegeben ... "zuviele Teilnehmer" !
Obwohl es nur 32 wahren !
Ich hab mir dann mal die Variable ausgeben lassen die die Zeilen in Deinem Script zählt.
Die hat 33 gezählt !
Aber das Problem konnte ich umgehen und er hat Das Script ausgeführt !

Leider hat er aber nichts gemacht !

Deine Annahmen waren aber genau richtig.

Hier mein Beispiel mit dem ich das ganze getestet hab.

Spieler Name: Zufalszahl Freilos Position
xxx1 0,3223 1
xxx2 0,1535 16
xxx3 0,9232 8
xxx4 0,2323 9
xxx5 0,4233
usw. usw.

Er sollte nun alle Spieler sortieren. Nehmen wir an es sind 29 Teilnehmer. Dann sollte er an die erste Position der Sortierung ein Freilos einsetzen (weil C2=1) (ohne Überschrift) !

Das nächste Freilos auf Position 16 dann 8 ... usw !!

Ich habe Das Script ohne die hier verwendeten Überschriften verwendet, damit es auch wirklich 32 Zeilen (oder weniger) sind !

Danke nochmal ... vielleicht hast Du ja noch eine Idee wie es funktionieren könnte !
Als Freilos sollte das Programm übrigens einen Wert aus einem Anderen Tabellenblatt einfügen.: z.B.: 'Parameter!D3'
Da steht aber nur F R E I L O S drinn !


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: WernerB.
Geschrieben am: 11.04.2005 11:00:29

Hallo Dan,

das Makro wurde mit den von mir getroffenen Annahmen ohne Beanstandungen getestet.
Wenn es bei Dir nicht funktioniert, so liegt es vermutlich daran, dass die von mir in Unkenntnis Deiner Datei getroffenen Annahmen auf Deine Datei nicht zutreffen; d.h. dass das Makro auf Deine Datei natürlich noch angepasst werden muss.

Von daher kann ich mich nur wiederholen:
Solltest Du diese Anpassung nicht selbst vornehmen können, so kannst Du Deine Datei (bitte nur ohne Makros!) hier hochladen; ich versuche dann ggf. die Anpassung für Dich vorzunehmen.

Mit anderen Worten: Die Gegebenheiten sind mir zu komplex, um sie aufgrund Deiner ungenügenden Beschreibung nachvollziehen zu können. Ohne Deine Datei sehe ich leider keine Chance, Dir mit möglichst wenig Aufwand eine maßgeschneiderte Lösung zu präsentieren.


Gruß
WernerB.


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: Dan
Geschrieben am: 11.04.2005 11:39:55

Hallo !
Sorry für meine wage Beschreibung ... das Projekt besteht aus zwei Dateien !

https://www.herber.de/bbs/user/20965.xls
https://www.herber.de/bbs/user/20966.xls

Eine kleine Erklärung habe ich der "test" Datei beigelegt !

Danke nochmal !


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: WernerB.
Geschrieben am: 11.04.2005 14:04:27

Hallo Dan,

wie gefällt Dir das (Deine Zufallszahlen werden dabei allerdings überschrieben!)?
Falls es weniger als 32 Teilnehmer sind, muss in den letzten Zellen der Spalte D entsprechend oft der Text "F R E I L O S" stehen.

Als kleine Zugabe erhältst Du außerdem noch einen auf den Bereich "F2:F33" abgestimmten Zufallszahlen-Generator, der Ganzzahlen von 1 bis 32 (ohne Doppelte) erzeugt; diesen musst Du aber nicht zwingend verwenden.

Sub ListeSortieren()
Dim i As Integer, _
    laR As Byte, anzFr As Byte
    Application.ScreenUpdating = False
'    Call ZufallsZahl
    For i = 33 To 2 Step -1
      If Range("D" & i).Text <> "F R E I L O S" Then
        laR = i
        Exit For
      End If
    Next i
    Range("C1:F" & laR).Sort Key1:=Range("F2"), _
      Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, _
      MatchCase:=False, Orientation:=xlTopToBottom
    If laR < 33 Then
      Range("F2").Value = 1
      Range("F2").AutoFill _
        Destination:=Range("F2:F33"), Type:=xlFillSeries
      anzFr = 33 - laR
      For i = 2 To anzFr + 1
        Cells(Range("G" & i).Value + 1, 6).ClearContents
      Next i
      Range("F1:F33").Sort Key1:=Range("F2"), _
        Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom
      Range(Cells(laR + 1, 6), Cells(33, 6)).Value = _
        Range("G2:G" & anzFr + 1).Value
      Range("C1:F33").Sort Key1:=Range("F2"), _
        Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom
    End If
    Application.ScreenUpdating = True
End Sub


Sub ZufallsZahl()
Dim c As Range, Ber1 As Range, Ber2 As Range, _
    ZuZ As Byte
    Set Ber1 = Range("F2:F33")
    Ber1.ClearContents
    For Each c In Ber1
      ZuZ = Int((32 * Rnd) + 1)  'Zufallszahl: 1 bis 32
      Set Ber2 = Ber1.Find(ZuZ, lookat:=xlWhole)
      While Not Ber2 Is Nothing
        ZuZ = Int((32 * Rnd) + 1)
        Set Ber2 = Ber1.Find(ZuZ, lookat:=xlWhole)
      Wend
      c.Value = ZuZ
    Next c
    Set Ber1 = Nothing
    Set Ber2 = Nothing
End Sub

Viel Erfolg wünscht
WernerB.


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: DAN
Geschrieben am: 11.04.2005 17:54:46

Hallo Werner !
DANKE für Deine Mühe ... sieht schon sehr vielversprechend aus !
Aber es scheint nicht zu funktionieren !

Er sortiert mir das ganze irgendwie ... aber nicht so das die Freilose richtig gesetzt sind . Oder muss ich etwas besonderes beachten ??
Du hast das ganze ja auf die Datei zugeschnitten die ich hochgeladen hab hab ich gesehen .... vielleicht liegt es aber auch daran das ich in VB nicht besonders versiert bin :)

Vielleicht könntest DU mir ja nochmal kurz helfen !?

Jetzt sortiert er irgendwie, ... nur das erste Freilos (an position1 - erste Zeile) scheint zu stimmen !

Gruß -dan-


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: WernerB.
Geschrieben am: 12.04.2005 08:17:54

Hallo Dan,

für das Funktionieren des Makros "ListeSortieren" gelten folgende Voraussetzungen:

1. Wenn weniger als 32 Spieler teilnehmen, dann müssen alle "Freilose" vor dem Makrostart lückenlos am Ende der Liste stehen.
Beispiel: Bei 29 Spielern muss vor dem Makrostart in den Zellen D31, D32 und D33 jeweils der Text "F R E I L O S" stehen.

2. In der Spalte F ("ZZ") müssen im gesamten Zellbereich F2:F33 Zufallszahlen stehen; ob Du dabei eigene verwendest oder den Zufallszahlengenerator nutzt, ist dem Makro egal. Alternativ dazu kannst Du die Zahlen auch vom Sortiermakro eintragen lassen, wenn Du die Kommentarisierung der Zeile "Call ZufallsZahl" aufhebst (Apostroph entfernen); dann ruft das Sortiermakro noch vor dem ersten Sortieren den ZZ-Generator auf.

Wenn diese Voraussetzungen vor dem Start des Sortiermakros erfüllt sind, dann arbeitet dieses – zumindest bei mir - wie folgt:

1. Alle Spieler (ohne die unten stehenden Freilose) werden nach Ihrer Zufallszahl sortiert.

2. Entsprechend der in Spalte G aufgeführten Reihenfolge (1, 16, 8. 9, 4, usw.) werden dann alle vorhanden (immer noch unten stehenden) Freilose an die vorgesehenen Freilospositionen geschoben/sortiert; für diese Freilos-Einsortierung werden dabei allerdings auch alle Zufallszahlen in der ZZ-Spalte F überschrieben.

3. Wenn unten keine Freilose stehen, erfolgt nur eine Sortierung; die Zufallszahlen werden dann auch nicht überschrieben.

Das heißt also, dass zuerst alle Spieler entsprechend Ihrer Zufallszahl sortiert und dann anschließend die Freilose an die vorgesehenen Positionen (entsprechend Spalte G) dazwischen geschoben/sortiert werden.
Wenn Du den ZZ-Generator nicht vom Sortiermakro aus aufrufst ("Call ZufallsZahl"), dann sollte diese Vorgehensweise auch mit demselben Ergebnis manuell so nachvollziehbar sein.


Gruß
WernerB.


Bild


Betrifft: AW: Spieler Auslosung (mit Freilose) von: Dan
Geschrieben am: 12.04.2005 10:54:05

Hallo Werner !
ECHT SUPER !
Funktioniert einwandfrei ... hab mich jetzt genau an Deine Vorgaben gehalten und es funktioniert echt toll !

Danke Dir .. echt nett von Dir mir so zu helfen !

Gruß -Dan2Web-


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Sortieren"