• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Puntentelling evenement

Status
Niet open voor verdere reacties.

Joe_nl

Gebruiker
Lid geworden
13 feb 2006
Berichten
16
Goede avond,

Voor een jaarlijks evenement dat ik organiseer gebruik ik een Excel werkblad met diverse tabbladen per spel/opdracht dat gespeeld/gedaan wordt, en 1 overzichtspagina voor de totaaltelling.

Op de pagina van elk spel of elke opdracht staat een lijst met teams (kolom A), waarnaast ik (in kolom B) invul hoeveel punten elk team verdiend heeft of hoe snel een team een opdracht gehaald heeft.

In de kolom (C) daarnaast worden aan de hand van de score of de tijd de punten toegekend. Tot en met vorig jaar ging dit aan de hand van een berekening met de formule =RANG(). Voorbeeld: =RANG(B1;B:B;0) Waarbij het laatste een 0 is als het om de snelste tijd gaat of een 1 is als het om langste tijd of om punten gaat.

Wat gebeurt er:
Team 1 scoort 10
Team 2 scoort 20
Team 3 scoort 20
Team 4 scoort 20
Team 5 scoort 30
Team 6 scoort 40

en kregen voorheen de volgende punten:

Team 1: 1
Team 2: 2
Team 3: 2
Team 4: 2
Team 5: 5
Team 6: 6

Hier zijn de verschillen nog niet zo groot, maar doe je dit met 30 of 40 teams en er wordt alleen maar 10, 20 of 30 gescoord, dan krijgen die met 10 maar 1 punt en die met 30 dus 30 punten. Dit verschil willen we kleine maken en dus dachten we aan het volgende, een oplopende volgorde, zoals:

Team 1: 1
Team 2: 2
Team 3: 2
Team 4: 2
Team 5: 3
Team 6: 4


Ik weet het, er omslachtig uitgelegd, maar ik hoop dat jullie het snappen.
Mogelijk denk ik te ingewikkeld en is de oplossing heel simpel, dat hoor ik dan natuurlijk heel graag.

Zijn er nog andere slimme manieren van puntentelling die jullie gebruiken of in gedachte hebben?

Ik hoor het graag,
vriendelijke groet,
Johan.
 
Als je een variabele verdeling wil houden kun je zoiets proberen:

=AFRONDEN(PERCENT.RANG($B$1:$B$14;B1)*3;0)+1

Dit geeft de laagste score altijd 1 punt, en de hoogste 4 punten. 2 en 3 punten worden verdeeld volgens het algemeen bereik. (indien bijna iedereen 10/20 punten scoort en 1 groep 30 en 1 groep 40 krijgen de laatste 2 groepen ieder 4, de rest 1,2)

PS je moet misschien een beetje met de formule spelen als je slechts 3 scores hebt, etc.
 
Laatst bewerkt:
Ik denk dat ik te moeilijk denk en dat de oplossing simpeler moet kunnen.
Met de formule spelen is in principe geen goed (niet de beste optie in ieder geval).
Het gaat om zo'n 18 spellen waarbij bij de meeste spellen wel een redelijke verdeling zal zijn, maar bij een enkel spel worden naar verwachting de verschillen met de huidige puntentelling te groot.

De vraag simpeler gesteld: hoe bepaal je van een reeks getallen de volgorde, waarbij dubbele waarden hetzelfde getal krijgen en de rest van de volgorde steeds 1 punt meer krijgt.

Bedankt voor je antwoord in ieder geval,
Vriendelijke groet,
Johan.
 
Als je slechts 3 scores zijn kan dat met een IF constructie. Met meerdere gradaties gebruik ik zelf liever mijn eerste formule, maar mogelijk zijn er nog andere oplossingen die ik zelf niet ken.
 
Ga er vanuit dat het dit jaar varieert van 20 tot 26 scores per spel, en dat dit andere jaren kan oplopen van 30 naar 40. Het handigst zou dus een degelijke formule zijn die niet 18 x 40 keer hoeft te worden aangepast.
 
Het gaat mij om de variatie in te verdienen punten, het aantal deelnemers is in principe irrelevant.
 
De variatie is zo groot als je kunt bedenken. De ene keer gaat het om de snelste (of langste) tijd, de andere keer om punten waarbij er soms 1, 5 of 10 punten te halen zijn, maar soms ook variërend van 1 t/m bijvoorbeeld 500. De ene keer is er dus volledige spreiding over de 26 teams, de andere keer halen 6 teams 1 punt, 10 teams 5 punten en 10 teams 10 punten.

Vooral bij dit laatste voorbeeld wordt met de huidige puntentelling het verschil te groot, dan krijgen namelijk (uit mijn hoofd gezegd) de eerste 6 teams 1 punt, de volgende 10 krijgen dan 7 punten en de laatste 10 krijgen dan 17 punten. Mooier zou zijn: 6 x 1, 10 x 2 en 10 x 3 punten.
 
let op: in het voorbeeldje hier boven
de testrange loopt maar tot regel 8
dus wat in regel moet je verwijderen
groet sylvester
 
Ik heb het inderdaad aangepast naar: =RangAnders(A2;$A$2:$A$22)
Dat lijkt te werken. Wanneer heel kolom A geselecteerd wordt (A:A) dan loopt Excel erop vast dus dat doe ik maar niet.

Ik heb op regel 3 van de VBA de 1 in een 0 veranderd (RangAnders = 0) zodat geen waarde of een score van 0 ook 0 punten oplevert en er vanaf 1 of hoger punten toegekend worden.

Voor de puntentelling gaat het hiermee perfect, helaas voor de snelste tijd niet (zie hieronder).

Apart dat er geen functie voor in Excel zelf zit, ik had verwacht dat de oplossing makkelijker zou zijn, maar dit werkt in ieder geval super!

Bedankt zover,
groet Johan.
 
Laatst bewerkt:
Tijdens het testen loop ik toch tegen het volgende wanneer het om de snelste tijd gaat. Vanzelfsprekend gaat de telling hier verkeerd om:

Tijd team 1: 0:30 > 1 punt, maar had 4 moeten zijn;
Tijd team 2: 1:00 > 3 punten, maar had 2 moeten zijn;
Tijd team 3: 2:00 > 4 punten, maar had 1 moeten zijn;
Tijd team 4: 1:00 > 3 punten, maar had 2 moeten zijn;
Tijd team 5: 0:40 > 2 punten, maar had 3 moeten zijn.

Is het erg lastig om ook een omgekeerde VBA-functie te schrijven? Of een 3e optie toe te voegen zoals bij de =RANG()-functie?

Sorry dat ik misschien wat lastig of veeleisend overkom, ik kan behoorlijk met Excel overweg maar van VBA heb ik geen kaas gegeten helaas.

Vriendelijke groet,
Johan.
 
zo werkt hij omgekeerd
Code:
Function RangAnders(C As Range, Waarden As Range)
    Dim Col As New Collection, W As Range
    RangAnders = 0
    If Waarden.Cells.Count = 1 Then Exit Function
    For Each W In Waarden
        For T = 1 To Col.Count
            If Col(T) >= W Then Col.Add W, , T: Exit For
        Next T
        If T > Col.Count Then Col.Add W
    Next W
    For T = Col.Count To 2 Step -1
        If Col(T) = C Then Exit Function
        If Col(T) <> Col(T - 1) Then RangAnders = RangAnders + 1
    Next T
End Function
groet sylvester
 
Hier zet ik RangAnders = 1 en voeg ik in de formule in de cel zelf een =ALS(A1=0;0;RangAnders( toe, anders krijgen lege cellen meer punten dan ingevulde (waarde 0 is lager dan 0:01). Een lege cel houd bij ons namelijk in dat een bepaald team de opdracht niet gedaan heeft en krijgt daar dan ook geen punten.

Enorm bedankt voor jullie antwoorden, het werkt nu super!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan