Passwort vergessen?   -   Registrieren

VBA (Excel) Experten?
Verfasser Nachricht
Ayal Offline
Posting Freak

Beiträge: 1,884
Registriert seit: Nov 2006
Beitrag #1
VBA (Excel) Experten?
Ich bin ein VBA-noob, frage mich aber, obs ne Möglichkeit gibt, ein Programm zu schreiben, welches mir einen Auszahlungsschlüssel automatisch liefert mit all den Bedingungen, die zu erfüllen sind.

Ich beschreibe mal die Situation:

In einem Fussballclub gibt es Spieler, die ausgewählt wurden, Prämien zu kassieren. Diese sind während dem Jahr entweder in der Stammformation oder auf der Ersatzbank.
Dies kann von Monat zu Monat ändern (beispielsweise wurden am 1. Januar nur Amateure in die Startelf befördert; der Rest konnte auf der Ersatzbank den Neujahrskater auskurieren lassen).


Der Präsident des Clubs verteilt nach dem Spiel trotz allem die Prämiem. Dabei gibt es 2 "Töpfe":

Für die Ersatzspieler werden pro Spieltag einfach insgesamt 50.- verteilt

Für diejenigen in der Startelf ist das ganze saisonabhängig (die aktuellen Zahlen findet man bei "aktuelle Verteilung"; es gibt 3 Möglichkeiten (Verteilung 1, 2 oder 3... je nach Situation.
Die Art der Verteilung wird am Spieltag selbst entschieden).


Nach Spielende wird jedem Spieler eine Note erteilt; diese berücksichtigt Trainings, Öffentliches Auftreten, Bilanz im Spiel, etc. und werden auch manuell eingegeben.


Nun erfolgt also die Verteilung (in %) anhand der Noten: man summiert alle Noten der Startelfmannschaft und erteilt jedem die errechnete %-Zahl.
(Siehe "Verteilungsschlüssel Runde 1").

Bei Costanzo wäre dies: 5.4 / 16.4 = 32.93%


Man muss hier zwischen den Ersatz- und Startelfspielern unterscheiden, da der Topf unterschiedlich gross ist.

Bei der Verteilungsschlüsselrunde 2 erfolgt nun die erste Restriktion: Ein Spieler der Startelf darf nicht mehr als 30% des Gesamtbetrags erhalten
(im obigen Fall darf Costanzo hier also nur 30%, nicht 32.93% einstreichen).

Bei den Ersatzsspielern ist der Maximalbetrag bei 80% (dies, weil der Topf sowieso nicht hoch ist).



Jetzt bleiben in gewissen Situationen ein Restbetrag übrig (siehe "RestSummeStart", resp. "RestSummeErsatz"). Dh, die Spieler, welche noch unter der Restriktion sind,
können davon profitieren. Dies habe ich nun so gemacht, dass alle Spieler, welche schon über dem Limit sind (das Maximum erreicht haben), keine Noten mehr erhalten,
die anderen bekommen dieselben Noten wie oben zugeteilt.


Bei der Verteilungsrunde 3 wird diese Ersatzsumme aufgeteilt für alle Spieler, die wie erwähnt noch nicht das Maximum erreicht haben.
(Der Spieler Huggel würde beispielsweise am 1.4.2010 der gesamte Rest bekommen von 56.67%... weil an diesem Spieltag nur 2 Leute in der Startelf waren
und Costanzo schon am Maximum war... aber in einem späteren Schritt wird auch hier Huggel von der Maximumsgrenze eingeholt werden, wie wir noch sehen werden).

Aber im Vergleich dazu wird am 1.7.2010 der Rest von 2.93% noch an die Spieler Incoom, Huggel und Streller mit jeweils 0.8%, 1.06% und nochmals 1.06% aufgeteilt).


Am 1.1.2010 war alles aufgegangen nach der Verteilrunde 1: Kein Spieler hat anhand seiner Noten den maximalen Ausschüttungsbetrag überschritten; zu beachten gilt noch,
dass es an diesem Tag keine Startelf gab... dh. Die Verteilung für die Startelf beträgt hier 0%).


Nun, in der 4. Phase des Verteilungsschlüssel wird geschaut, dass die Spieler, welche oben profitiert haben, die Maximalgrenze wieder nicht überschreiten:
es wird das MINIMUM genommen aus der Verteilrunde 2 + Verteilrunde 4 im Vergelich zur maximalen Auszahlungsrate (30% für Startelf, 80% für Ersatzsspieler).
Dh zB bei Huggel wird am 1.4.2010 dies zum "Verhängnis"; er bekommt nur 30%... aber im Vergleich zu vorher ist dies immer noch mehr,
als die 13%, welche er nach der 2. Runde bekommen hätte.


Ganz am Ende werden noch die Beträge in CHF zugeteilt:
Befindet sich ein Spieler in der Startelf, so wird sein %-satz (welche in der 4.Verteilrunde errechnet wurde) multipliziert mit dem Ausschüttungsbetrag für den laufenden Monat
für die Startelf (am 1.7. wären dies 700 CHF, am 1.4. 400 CHF und am 1.1. 500 CHF).


Ein Spieler von der Ersatzbank erhält einfach seinen Auszahlungsprozentsatz multipliziert mit "50" (da es dort konstant ist).

Zu Guter letzt wird noch geschaut, welcher Restbetrag übrig geblieben ist. Diesen Betrag bekommt dann der Präsident.


Ich habe diese Verteilrunden nun "manuell" erstellt und bin zum Schluss gekommen, dass man ca. 3 mal "durchlaufen" muss, damit der entgültige %satz festgelegt ist
(es häte beispielsweise am 1.4. nochmals einen Durchlauf geben können, falls ein weiterer Spieler in der Startelf gewesen wäre).


Es muss doch möglich sein, dass VBA all diese Schritte automatisch erledigt. Jedoch wie? Ist dies eine grosse Herausforderung?




<!-- m --><a class="postlink" href="http://img844.imageshack.us/i/76753767.jpg/">http://img844.imageshack.us/i/76753767.jpg/</a><!-- m -->
08-31-2010 11:44 AM
zitieren
pitschsen Offline
Senior Member

Beiträge: 394
Registriert seit: Jul 2008
Beitrag #2
Re: VBA (Excel) Experten?
Hui Smile

Hat mich interessiert und jetzt kurz ein wenig Zeit gekostet es durchzugehen Smile Am Anfang habe ich das Bild noch nicht gesehen, da wars noch ein wenig komplizierter Smile

Also ich kenne leider VBA nicht wirklich, habe vor X Jahren damit ein wenig gearbeitet.
Ich habe aber das Gefühl, dass dies nicht ganz sooo einfach ist, wenn du nicht Programmiererfahren bist!?

Rein Programmiertechnisch ist es sicher möglich. Mein Problem ist, dass ich die abhängigkeiten zu Excel zu wenig kenne.

Ich denke es macht auch noch einen Unterschied ob du z.b. einen Spieler mehr hinzufügen willst? Also ob es immer 5 spieler und die selben sind?
Der Anwendungsfall mit den fussballern ist ein wenig abstrakt Smile

Wenn ich mir es als Website(PHP-Anwendung) o.ä. vorstelle, wäre es sicher nicht allzuu schwer...

Aber kann dir leider auch nicht wirklich helfen in diesem Beispiel, sorry.. Smile
08-31-2010 01:13 PM
zitieren
Ayal Offline
Posting Freak

Beiträge: 1,884
Registriert seit: Nov 2006
Beitrag #3
Re: VBA (Excel) Experten?
ja ab und zu kommen tatsächlich neue spieler dazu, andere fallen weg (transfers und so lassen grüssen Big Grin ). Gewisse Spieler pflegen auch ein besonderes Verhältnis zum Vorstand, welches dann belohnt werden muss, dass sie überhaupt auf die Liste kommen.

wie meinst du als website wär es einfacher...? das ganze muss nicht im excel sein...
08-31-2010 01:53 PM
zitieren
pitschsen Offline
Senior Member

Beiträge: 394
Registriert seit: Jul 2008
Beitrag #4
Re: VBA (Excel) Experten?
Bist du Gigi Oeri? Smile

Ich kanns leider nicht beurteilen, wie schwer oder einfach es in Excel ist. Ich programmiere in Java und habe früher mit PHP oftmals was gemacht. Daher kann ich mir es dort eher vorstellen.

Du müsstest ein Objekt haben welches den Spieler, seinen Verteilungstyp, seine Note und die aktuelle Anzahl Prozente speichert.
Danach müsstest du all diese Objekte in einem Array/Liste ablegen.

Danach ist es möglich im Code immer wieder die gleiche Funktion/Methode aufzurufen in welcher du beim ersten Aufruf 100 Prozent mitgibst und deine Spieler-Liste mit den Infos.
Beim 2.-X. Aufruf würdest du dann nur noch die restlichen zu verteilenden Prozente mitgeben.
Die Funktion selber würde dann handeln, dass ein Spieler nie über 30% kommen kann. Als Rückgabewert z.B. die restlichen zu verteilenden Prozente zurückgeben. Dann könntest du die Funktion so lange aufrufen, bis du noch %e zum verteilen hast. Natürlich könntest du dies auch gleich innerhalb der Funktion lösen.

Naja, ich denke ich bin nicht wirklich eine grosse Hilfe Smile Ich kann nur sagen, dass dies sicher so funktionieren würde. Habe aber leider keine Ahnung wie und ob mit VBA/Excel…
08-31-2010 02:41 PM
zitieren
Ayal Offline
Posting Freak

Beiträge: 1,884
Registriert seit: Nov 2006
Beitrag #5
Re: VBA (Excel) Experten?
evtl ist diese aufgabe bissl leichter für VBA profis:

im ersten register sieht man eine ungeordnete Übersicht über die Notenvergabe der einzelnen Spieler (A bis F... wobei natürlich mehr leute sich auf der liste befinden... habs einfach abgeschnitten).

Da einige Spieler früher im Verein spielten und heute nicht mehr, gibts nicht zu jedem Datum eine Note für jeden Spieler.

Gewisse Spieler (wie zB "B" "C" oder "E") sind auf der Liste, erhielten aber noch nie Noten.

Andere Spieler ("F") verliessen den Verein nach Februar 2009.

Nun sollen dennoch alle Noten (in einem zweiten Register) schön geordnet sein... wie kann ich diesen Ablauf automatisieren? gehts mit VBA oder irgendwie einfacher? Das Problem beim ersten Register ist, dass es immer wieder leere Spalten dazwischen gibt (Spalten C, E, F, H, I... etc) (hab die Spielernamen bissl blöde gewählt... sollte keine Verwirrung mit den Spalten entstehen.


Wäre dankbar für irgend ne solution.

<!-- m --><a class="postlink" href="http://img821.imageshack.us/i/gggggggge.jpg/">http://img821.imageshack.us/i/gggggggge.jpg/</a><!-- m -->
08-31-2010 02:41 PM
zitieren
Ayal Offline
Posting Freak

Beiträge: 1,884
Registriert seit: Nov 2006
Beitrag #6
Re: VBA (Excel) Experten?
<!-- w --><a class="postlink" href="http://www.office-loesung.de">www.office-loesung.de</a><!-- w -->

super forum !!! da werden Sie geholfen Smile
09-06-2010 02:33 AM
zitieren


Gehe zu:


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

Kontakt | raise.ch | Nach oben | Zum Inhalt | Archiv-Modus | RSS-Synchronisation
Deutsche Übersetzung: MyBBoard.de, Powered by MyBB, © 2002-2024 MyBB Group.
Designed by © Dynaxel