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

1 na laagste waarde

Status
Niet open voor verdere reacties.

caffie

Gebruiker
Lid geworden
2 jan 2008
Berichten
291
Ik zoek de 1 na laagste waarde

=KLEINSTE($D$9:$D$276;2)

Maar omdat er veel dubbele getallen in de range zitten snap Excel dit niet (of niet snap excel niet)

ik heb een "als" geprobeerd maar omdat de laagste en 1 na laagste waarde vaak voorkomt moet ik een bijna oneidige "als" funtie bouwen.



iemand een tip zonder VB te gebruiken.

vast bedanktBekijk bijlage AAAAAfvallen.xlsx
 
Laatst bewerkt:
Ja hoor: =KLEINSTE($D$9:$D$276;1+AANTAL.ALS($D$9:$D$276;MIN($D$9:$D$276)))
 
Prachtig


je tel het aantal keer wat de laagste waarde is dan +1 en dat is de K factor



toch bedankt
 
Ik zoek de 1 na laagste waarde ... Maar omdat er veel dubbele getallen in de range zitten snap Excel dit niet

Kan je dit is in een voorbeeldbijlage laten zien wat het probleem daarmee zou zijn? Ik kan me namelijk geen reden bedenken waarom dubbele waardes tot problemen zou leiden met deze functie. De functie SMALL (kleinste) zal naar mijn idee een gesorteerde lijst opbouwen en daaruit de waarde van jouw keuze uit peuteren. Ik gok dus dat jij waardes hebt staan met decimalen, maar die via de opmaak van de cel niet toont... (maar da's een gok via het kijken in de glazen bol).
 
File is toegevoegd


oplossing van MarcelBeug toegevoegd en dat werk perfect.
=KLEINSTE($D$9:$D$276;1+AANTAL.ALS($D$9:$D$276;MIN($D$9:$D$276)))


maar als ik bij D4 de formule
=KLEINSTE($D$9:$D$276;1)
aanpast naar
=KLEINSTE($D$9:$D$276;2)
dan werkt dit niet


maar wel met de oplossing van MarcelBeug


ik gebruikt Excel 2007 nederlands
Misschien dat dit er mee te maken heeft.



m.v.g.

Rob
 
Caffie, dank voor het delen van deze bug (want dat is het in mijn ogen). Ik vreesde dus éérst dat het inderdaad ging om wat ik al zei. Dus met decimalen. Dat zichtbaar is: 82.6 maar dat er voor Excel bijvoorbeeld 82.600005 stond. Maar dat is dus niet het geval.
Dit vind ik echt wel een zeer storende fout dat al je waardes in je te onderzoeken bereik uniek moeten zijn om tot een juist resultaat te komen.
Ik heb ook nog even getest met SMALL(...;3) en dan krijg je 82.9 ofwel de derde waarde van onderaf gemeten. Héél bizar maar vooral iets om heel erg rekening mee te houden in onderzoeken!

Of wij bedenken nu natuurlijk een heel andere invulling voor deze functie dan dat MS heeft gedaan.
 
@Ginger: ik zie geen fout noch een probleem.
KLEINSTE (of SMALL) geeft gewoon de waarden van onderaf. Als je een reeks 1 1 2 2 hebt, dan is de tweede waarde toch gewoon 1?
En in het voorbeeld is 82,9 de derde waarde van onderaf: 82,6 82,6 82,9 etcetera.
 
@MarcelBeug, Yep! Maar het is maar hoe je er tegenaan kijkt. Als je in mijn ogen de "op één na kleinste" waarde uit een lijst met waardes wilt hebben, verwacht ik met de functie SMALL als resultaat niet de waarde van de k positie terug te krijgen, maar de werkelijke waarde van die "op één na kleinste". Om jouw voorbeeldje vast te houden in bijvoorbeeld een lijst met waarden 1, 1, 2, 4, 4, 4, 5 en dan k = 3 zou ik dus een 4 verwachten en niet de waarde van de derde positie, ofwel een 2.

Maar daarom gaf ik in postnr. 6 ook al aan...
Of wij bedenken nu natuurlijk een heel andere invulling voor deze functie dan dat MS heeft gedaan
En dát is dus simpelweg het geval. ;)
Want het klopt inderdaad precies als je de k positie uit je overzicht terug wilt zien.
Da's dus niet fout, maar het kán wél een probleem zijn waardoor de vraag van de TS ontstaat. :D

Toch kon ik het niet laten om een UDF te maken die wél de waarde teruggeeft van de gezochte kleinste gevraagde k uit een lijst alsof het een lijst met alleen maar unieke waardes was...

Code:
Function SmallUnique(Bereik As Range, Optional k As Integer = 1) As Double
' RedHead 04/12/2016; geef de waarde van de k positie terug alsof de lijst alleen maar unieke waarden bevat
' Dit is een andere werking dan de ingebouwde functie SMALL (nl: Kleinste)
Dim UniekeLijstTemp() As Variant
Dim el As Integer, i As Integer

    UniekeLijstTemp = WorksheetFunction.Frequency(Bereik, Bereik)
    ReDim UniekeLijst(1 To UBound(UniekeLijstTemp, 1))
    For el = 1 To UBound(UniekeLijstTemp, 1)
        i = i + 1
        If UniekeLijstTemp(el, 1) > 0 Then UniekeLijst(i) = Bereik(el, 1)
    Next el
    SmallUnique = WorksheetFunction.Small(UniekeLijst, k)
    
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan