Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro zur Auswertung

Makro zur Auswertung
12.01.2007 21:03:48
Günter
Hallo Excel-Fans,
ich möchte für ein Skatturnier die Auswertung mit Excel durchführen.
Das Endergebnis nach Beendigung der einzelnen Spielserien oder des Turniers
kann ich sortieren mit einem Makro ( Aufzeichnung mit Marorekorder ).
Da die Spieler zu einer weiteren Spielserie nach ihrem Punktestand an die
einzelnen Tische verteilt werden müssen, brauche ich einen Ausdruck für jeden
Tisch.
Z.B. Tisch (Nummer)
Platz 1 (Spielername aus Spalte C) Punkte (Gesamtsumme aus Spalte H)
Platz 2 „ „
Platz 3 „ „
Platz 4 „ „
Und das solange, wie Spieler vorhanden sind. Ausdruck in 20 P.
Das Makro muss erkennen, wie viel Spieler teilnehmen.
Anzahl der Spieler geteilt durch 4, so das bei nicht zu teilender Anzahl die letzten
1-3 Tische nur mit 3 Spielern besetzt werden.
Meine Frage?:
Ist das machbar, und wenn ja, kann mir jemand dieses Makro schreiben?
Vielen Dank im Voraus und Viele Grüsse
Günter

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zur Auswertung
13.01.2007 00:40:30
fcs
Hallo Günther,
es kein großes Problem aus einer sortierten Liste von Spielern einen Spielplan mit 4er und 3er Tischen per Makro zu erstellen.
Allerdings wäre es hilfreich, wenn du hier eine Beispieldatei einstellen würdest, damit im Makro die Datenbereiche korrekt angesprochen werden können
Beispieldatei: https://www.herber.de/bbs/user/39630.xls
Die Blattnamen und einige Zeilennummern im Code muss du ggf. noch anpassen.
Gruss
Franz


Sub SpielplanRunde2()
Dim wksPlan As Worksheet, wksRunde2 As Worksheet
Dim AnzSpieler As Integer, Zeile2 As Long, ZeilePlan As Long, SpielerMax As Integer
Dim Tisch As Integer, Tische As Integer, Tische4 As Integer, Tische3 As Integer
Set wksPlan = Worksheets("Spielplan") 'Tabellenblatt mit den Ergebnissen der 1. Runde
Set wksRunde2 = Worksheets("Runde2") 'Tabellenblatt für Spielplan der 2. Runde
ZeilePlan = 2 '1. Zeile mit einem Spielernamen in Ergebnisliste
Zeile2 = 4 'Zeile in der 1. Spieler von Tisch 1 der 2. Runde eingetragen werden soll
With wksPlan
'Aus der letzten Zelle mit Daten in Spalte C die Anzahl Spieler ermitteln
AnzSpieler = .Cells(.Rows.Count, "C").End(xlUp).Row - ZeilePlan + 1
'Anzahl Tische ermitteln
If AnzSpieler Mod 4 = 0 Then
Tische3 = 0
Tische4 = AnzSpieler / 4
Tische = Tische4
Else
Tische3 = 4 - AnzSpieler Mod 4
Tische4 = (AnzSpieler - Tische3 * 3) / 4
Tische = Tische3 + Tische4
End If
'Alte Daten in Blatt Runde2 löschen
wksRunde2.Range(wksRunde2.Rows(Zeile2), wksRunde2.Rows(wksRunde2.UsedRange.Rows.Count)).ClearContents
'Tische für Runde 2 im Blatt Runde2 eintragen
For Tisch = 1 To Tische
'Tisch in Spalte A eintragen
wksRunde2.Cells(Zeile2, "A").Value = "Tisch " & Tisch
If Tisch <= Tische4 Then SpielerMax = 4 Else SpielerMax = 3
For Spieler = 1 To SpielerMax
'Spielername eintragen
wksRunde2.Cells(Zeile2, "B").Value = .Cells(ZeilePlan, "C").Value
'Punktzahl eintragen
wksRunde2.Cells(Zeile2, "C").Value = .Cells(ZeilePlan, "H").Value
ZeilePlan = ZeilePlan + 1
Zeile2 = Zeile2 + 1
Next
'Für Leerzeile zwischen jedem Tisch
Zeile2 = Zeile2 + 1
Next
End With
wksRunde2.Activate
End Sub


Anzeige
AW: Makro zur Auswertung
13.01.2007 07:12:18
Günter
Moin Franz,
es freut mich, wenn Dir so ein Makro kein Problem bereitet.
Vielleicht habe ich mich gestern etwas umständlich ausgedrückt.
Ich benötige nach jeder Serie für die nächste einen Ausdruck, damit
die Spieler wissen, wo sie sitzen müssen. Und das jeweils für
jeden möglichen Tisch einzelnd. Da wir Turniere mit 2 bis 8 Serien
spielen, könnte ich das Makro jeweils anpassen.
Sortierung für das Makro wäre immer die Spalte " Gesamt ",
das Ergbnis immer die Ausgabe aus der Seite " Tischausdruck " der Beispieldatei.
Beispieldatei: https://www.herber.de/bbs/user/39631.xls
hoffentlich bereite ich Dir nicht zuviel Arbeit
Besten Dank und Grüsse
Gunter
Anzeige
AW: Makro zur Auswertung
14.01.2007 13:06:24
fcs
Hallo Günther,
nach kleine Problemen die Sortierung der Spieler mit negativer Geasmt-Punktzahl korrekt hinzubekommen funktioniert es jetz.
Die Serie, für die der Tischausdruck erstellt werden soll wird erkannt. Dazu muß der Eingabebereich für die noch nicht gespielten Serien leer sein. Auch der Tischplan für die 1. Serie kann gedruckt werden. Die Daten werden dann ohne Sortierung so gedruckt, wie sie im Blatt "Eingabe" eingegeben sind.
Das Makro erkennt auf Grund der eingegebenen Formeln die Spalte "Gesamt", so dass beliebig viele Spalten für Serien eingefügt werden können ohne das Makro anpassen zu müssen. Zum Testen habe ich den Code so erstellt, dass für die Ausgabe Drucken oder Seitenvorschau gewählt werden kann. Wenn alles rund läuft, dann kannst du ja die Code-Abschnitte für die Seitenvorschau so anpassen/löschen, dass direkt gedruckt wird.
Gruss
Franz

Sub Tischausdruck()
Dim wksEingabe As Worksheet, wksAusdruck As Worksheet
Dim LetzteZeile As Long, ZeileEingabe As Long, Serie As Integer, Gesamt As Integer
Dim Spalte As Integer, AnzSpieler As Integer, Spieler As Integer
Dim Spieler3er(), Spieler3 As Integer, zeile3er As Long, Tische3 As Integer
Dim Seitenvorschau
'Sicherheitsabfrage
If MsgBox("Tischausdruck erstellen?", vbYesNo, "Tischausdruck") = vbNo Then Exit Sub
Seitenvorschau = MsgBox("Druckausgabe zum Testen als Seitenvorschau?", vbYesNo + vbQuestion, "Tischausdruck")
Set wksEingabe = Worksheets("Eingabe") 'Tabellenblatt mit den Eingaben
Set wksAusdruck = Worksheets("Tischausdruck") 'Tabellenblatt für Tischausdruck
ZeileEingabe = 2 '1. Zeile mit einem Spielernamen in Eingabeblatt
With wksEingabe
'Spalte mit Gesamtpunktzahl (Letzte Spalte mit Daten)
Gesamt = .Cells(ZeileEingabe, .Columns.Count).End(xlToLeft).Column
'Serie ermitteln, Datenbereich der noch nicht gespielten Serien muss leer sein! (Nur Titelzeile)
For Spalte = 5 To Gesamt - 1
If .Cells(.Rows.Count, Spalte).End(xlUp).Row = ZeileEingabe - 1 Then
Serie = Spalte - 4
Exit For
End If
Next
If Serie = 0 Then
If MsgBox("Es wurden bereits alle Serien gespielt!" & vbLf & vbLf _
& "Tischausdruck erstellen?", vbYesNo + vbQuestion, "Tischausdruck") = vbNo Then
Exit Sub
End If
End If
'Eingabedaten neu sortieren, wenn schon Ergebnisse für eine Serie eingegeben sind
If Serie > 1 Then
'Letzte Zeile mit Spielername in Spalte C
LetzteZeile = .Cells(.Rows.Count, "C").End(xlUp).Row
'Spieler nach Namen sortieren, erforderlich, damit leere Einträge der 3er-Tische ans _
Ende sortiert werden und Spieler mit negative Punktzahlen korrekt einsortiert werden
.Range(.Cells(ZeileEingabe - 1, 3), .Cells(LetzteZeile, Gesamt)).Sort _
Key1:=.Cells(ZeileEingabe - 1, 3), Order1:=xlAscending, Header:=xlYes
'Letzte Zeile mit Spielername in Spalte C
LetzteZeile = .Cells(.Rows.Count, "C").End(xlUp).Row
'Spieler nach Ergebnis sortieren
.Range(.Cells(ZeileEingabe - 1, 3), .Cells(LetzteZeile, Gesamt)).Sort _
Key1:=.Cells(ZeileEingabe - 1, Gesamt), Order1:=xlDescending, Header:=xlYes
'Aus der letzten Zelle mit Daten in Spalte C die Anzahl Spieler ermitteln
AnzSpieler = LetzteZeile - ZeileEingabe + 1
'3er Tischen die Spieler zuordnen
If AnzSpieler Mod 4 <> 0 Then
Tische3 = 4 - AnzSpieler Mod 4
zeile3er = LetzteZeile - Tische3 * 3 + 1 'Zeile des 1. Spielers an einem 3er-Tisch
'Spieler-Daten der 3er-Tische in Datenfeld einlesen
ReDim Spieler3er(1 To Tische3 * 3, 1 To Gesamt - 1)
For Spieler3 = 1 To Tische3 * 3
For Spalte = 3 To Gesamt - 1
Spieler3er(Spieler3, Spalte) = .Cells(zeile3er + Spieler3 - 1, Spalte).Value
Next
Next
'Daten der Spieler an 3er-Tischen eintragen
Spieler3 = 1
For Tische3 = 1 To 4 - AnzSpieler Mod 4
'Daten der 3 Spieler eintragen
For Spieler = 1 To 3
For Spalte = 3 To Gesamt - 1
.Cells(zeile3er, Spalte).Value = Spieler3er(Spieler3, Spalte)
Next
Spieler3 = Spieler3 + 1
zeile3er = zeile3er + 1
Next
'4. Spieler ohne Daten, Zellinhalte löschen
For Spalte = 3 To Gesamt - 1
.Cells(zeile3er, Spalte).ClearContents
Next
zeile3er = zeile3er + 1
Next
End If
End If
'Tischausdrucke erstellen
'Letzte Zeile mit Spielername in Spalte C
LetzteZeile = .Cells(.Rows.Count, "C").End(xlUp).Row
'Serie Nr. eintragen
wksAusdruck.Cells(2, "B").Value = "Setzplan für die " & Serie & ". Serie"
Do Until ZeileEingabe > LetzteZeile
'Tisch Nr. eintragen
wksAusdruck.Cells(5, "C").Value = .Cells(ZeileEingabe, "A").Value
For Spieler = 1 To 4
'Spielername eintragen
wksAusdruck.Cells(6 + Spieler, "C").Value = .Cells(ZeileEingabe, "C").Value
'Punktzahl eintragen
If .Cells(ZeileEingabe, "C").Value = "" Then '3er Tisch
wksAusdruck.Cells(6 + Spieler, "G").Value = ""
Else
wksAusdruck.Cells(6 + Spieler, "G").Value = .Cells(ZeileEingabe, Gesamt).Value
End If
ZeileEingabe = ZeileEingabe + 1
Next
If Seitenvorschau = vbNo Then
wksAusdruck.PrintOut
Else
wksAusdruck.PrintPreview 'Zeile zum Testen und Papiersparen
End If
Loop
End With
End Sub

Anzeige
AW: Danke
14.01.2007 16:38:45
Günter
Moin Franz,
Makro klappt perfekt.
Danke und schönen Sonntag noch.
Gruss
Günter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige