• 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.

bepaling tien grootste

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Voor het berekenen van een correctiefactor moet ik de vijf laatsten uit een tabel (grootste volgnummer), die aan een bepaalde voorwaarde voldoen, delen door de tien laatsten. De bepaling van van de grootste doe ik met de volgende matrixformule:
Code:
{=ALS.FOUT(INDEX(Overtredingsscore;GROOTSTE(ALS(ID_Bedrijven=1;RIJ(ID)-2);1));"")}
{=ALS.FOUT(INDEX(Overtredingsscore;GROOTSTE(ALS(ID_Bedrijven=1;RIJ(ID)-2);2));"")}
en dat nog acht keer. Dit werkt. Maar omdat dit heel vaak moet gebeuren en dus snelheid kost, vroeg ik me af of dit niet in één formule te doen is en dus efficienter kan gebeuren. Iemand een idee of een goede suggestie?
 
Matrixformule.
Code:
=SOM(GROOTSTE(ALS(B1:B100=1;A1:A100);RIJ(1:5)))/SOM(NIET(ISNB(VERGELIJKEN(RIJ(A1:A100);GROOTSTE(ALS(A1:A100<>"";RIJ(A1:A100);"");RIJ(1:10));0)))*(A1:A100))
 
Laatst bewerkt:
Bedankt Harry; ik snap er echter eigenlijk (nog) niet veel van - helaas.

Ik heb je bijdrage opgehakt. Ik heb geprobeerd de vijf grootste waarden in één keer uit een reeks (ID) te halen en de bijbehorende waarden in dezelfde rij uit een andere kolom (Overstredingsscore) op te tellen:
Code:
=SOM(INDEX(Overtredingsscore;(GROOTSTE(ALS(ID_Bedrijven=Linked_cel;RIJ(ID)-2);RIJ(1:5)))))
Dat optellen gebeurt echter helaas niet: ik krijg enkel de grootste waarde.

De volgende formule:
Code:
=SOM(GROOTSTE(ALS(ID_Bedrijven=Linked_cel;Overtredingsscore);RIJ(1:5)))
telt wel de hoogste waarden op in de matrix 'Overtredingsscore', maar dan wordt niet voldaan aan de eis de hoogste waarde bepaald moet worden in een andere matrix/kolom.

Doe ik het volgende:
Code:
=SOM((GROOTSTE(ALS(ID_Bedrijven=Linked_cel;RIJ(ID)-2);RIJ(1:5))))
dan worden de waarden in de matrix/kolom opgeteld waarvan de vijf hoogste waarden bepaald moeten worden, om in de andere kolom (Overtredingsscore) de optelling uit te voeren.

De onderste twee formules moeten als het ware gecombineerd worden om het goede resultaat in de bovenste te verkrijgen.

Zie jij wat ik fout doe?
 
Zonder een voorbeeldbestand kan ik mij even jouw situatie wat moeilijk voorstellen.
Ik heb me er daarom een vereenvoudigde voorstelling van gemaakt en daarin een oplossingsweg proberen te zoeken.
Ik wil de hoogste 5 getallen uit kolom B optellen als het getal in kolom A even is (helaas werkt de functie IS.EVEN niet in een matrixformule, daarom de oplossing via de functie REST).

Komt dit een beetje in de richting?
 

Bijlagen

  • testmap1.xlsx
    14,2 KB · Weergaven: 24
Fijn dat je er even naar wilt kijken Thoralf!

Ik heb een voorbeeldje van het principe toegevoegd. De kolom waar de grootsten waarden (op basis van C33 = Linked_cel) moeten worden gezocht is kolom A. Als die zijn bepaald moeten de waarden in kolom Y opgehaald worden. Het gemiddelde van de zo bepaalde 5 hoogste waarden moet worden gedeeld door het gemiddelde van de 10 hoogste waarden. Ik doe dat nu in 10 stappen; zie G33 t/m O33, wat het resultaat in Q33 geeft. Graag zou ik dat in een slag uitgevoerd zien, o.a. in de verwachting dat dit snelheidswinst oplevert.

Jouw voorbeeldje doet wat anders.
 

Bijlagen

  • voorbeeldje.xlsx
    16,1 KB · Weergaven: 18
Ik denk dat dit het moet zijn.
 

Bijlagen

  • voorbeeldje.xlsx
    23 KB · Weergaven: 39
Dit is het helemaal; heel hartelijk bedankt. Wat een 'beest' van een formule...
Ook dank dat je mij hebt gewezen op een domme denkfout in mijn eigen formule.
 
Geen dank. Tenminste weer iemand blij gemaakt.
Hoop dat je door de opbouw van de formule in het bestandje begrijpt hoe de formule werkt.
 
Laatst bewerkt:
Ik begrijp het inderdaad helemaal; heel handig de duidelijke tussenstappen. Ik heb ook gezien dat je voor de twee delen een iets gewijzigde benadering hebt gebruikt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan