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

Vreemd gedrag matrix formule

Status
Niet open voor verdere reacties.

E v R

Terugkerende gebruiker
Lid geworden
22 okt 2008
Berichten
1.563
In onderstaand draadje werd een vraag gesteld om van de eerste drie voorkomende warden van een code uit kolom B de scores uit kolom D op te tellen.

http://www.helpmij.nl/forum/showthread.php/924119-De-eerste-drie-waarden-tellen-in-een-bereik

Nu ben ik van mening dat de de opbouw van de gegevens wel wat handiger kan, maar daar gaat het nu niet om.

Ik heb getracht om op basis van deze gegevens een matrix-formule te maken:

Code:
=SUM(--(INDEX($D$4:$D$40;SMALL(IF($B$4:$B$40=$F$5;ROW($B$4:$B$40)-MIN(ROW($B$4:$B$40))+1;"");ROW($1:$3));)))

Nu werkt deze formule prima als ik deze over meerdere cellen (tegelijkertijd) CSE afsluit, maar als ik deze formule in 1 cel CSE afsluit geeft deze enkel de eerste 'match'

Het maakt niet uit over hoeveel cellen ik de formule afsluit, als het er maar geen 1 is.

vraag:
Is er iemand die mij deze werking kan uitleggen / verklaren?

(het lijkt erop dat door multi-cell CSE er nog een (gewenste) extra evaluatie wordt uitgevoerd) (coercing array returns)

Een kleine aanpassing van de formule mag ook, maar het gaat mij meer om de verklaring
 

Bijlagen

  • vreemde CSE .xlsx
    10,7 KB · Weergaven: 53
Laatst bewerkt:
Ik vermoed dat de index functie niet om kan gaan met de matrix 1,2,3.

Het lijkt mij iets als de transponeren functie.

In een enkele cel.
Code:
=SOM(NIET(ISNB(VERGELIJKEN(RIJ(D4:D400);KLEINSTE(ALS($B$4:$B$400=$F$5;RIJ($D$4:$D$400));RIJ($1:$3));0)))*(D4:D400))
 
Laatst bewerkt:
Geen antwoord/verklaring, maar zoekbeperking:

Met de array formule

PHP:
=SUM(($B$1:$B$40=$F$5)*($D$1:$D$40))

komt wel het goede antwoord uit de bus.
Het probleem moet dus elders in de formule zitten.

Overigens is dankzij de consistentie van de onhandige opbouw van het werkblad de bovenstaande formule toereikend.
 
Laatst bewerkt:
@HSV en @snb, dank voor jullie reakties,

als ik de Small functie wijzig in de Aggregate equivalent en de row(1:3) in een gedefineerde naam zet (dus al een keer geevalueerd) werkt het wel....( _rijen = =ROW(Blad1!$1:$3) )

Code:
=SUM(--(INDEX($D$4:$D$400;AGGREGATE(15;4;IF($B$4:$B$400=$F$5;ROW($B$4:$B$400)-MIN(ROW($B$4:$B$400))+1;"");_rijen);)))

Ik zoek nog even verder naar de verklaring, nogmaals bedankt!
 
Inderdaad zeer vreemd gedrag. De kleinste-functie geeft in dit geval geen matrix terug maar een getal. Dat er bij een matrixformule over meerdere cellen wél de juiste waarde wordt weergeven lijkt mij te worden veroorzaakt door een bug in het gedrag van de dubbele mintekens. Als ik de dubbele mintekens vervang door de N-functie, dan treedt dit gedrag niet op. Hierbij een alternatieve formule waarbij de kleinste-functie wel wordt omgezet naar een matrix:
Code:
=SOM(INDEX(D1:D400;N(INDEX(KLEINSTE(ALS(B1:B400=F5;RIJ(A1:A400));RIJ(1:3));;))))
 
Nog een matrix-variant die het gezochte resultaat geeft:
Code:
=SUM(SUBTOTAL(9;OFFSET(D4;SMALL(IF(B4:B100=F5;ROW(B4:B100)-4;"");ROW(A1:A3));0;1;1)))
 
@rebmog en @Wher, thanks!

De dubbele Index lijkt het het te doen, (Index N, T, -- , kunnen matrix-uitkomsten 'dwingen' om al te worden geevalueerd)
De offset variant, helaas volatile, werkt ook prima
:thumb::thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan