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

afronden+format resultaat

Status
Niet open voor verdere reacties.

Symphysodon

Gebruiker
Lid geworden
14 dec 2012
Berichten
468
Beste forummers,

Ik heb een nieuwe vraag over het afronden van getallen.
Het gaat om getallen tussen 0.1 en 100000

Voor getallen tussen 0.1 en 1 gelden de eisen:
- afronding op 2 decimalen nauwkeurig.
- getallen eindigend op een 5 met 12 nullen dienen afgerond te worden naar het dichtstbijzijnde even getal.

Voor de getallen tussen 1 en 100000 gelden de volgende eisen:
- afronding op 1 decimaal nauwkeurig, ook gehele getallen.
- getallen eindigend op een 5 met 12 nullen dienen afgerond te worden naar het dichtstbijzijnde even getal.
- De notatie van getallen > 1000 moeten zonder floating point.


In het onderstaande voorbeeld het stukje code dat ik heb, maar nog niet helemaal klopt.
Code:
Function Afronden_even(Getal) As Variant

Select Case Getal
    Case 0.1 To 0.9999999
        afgerond = Application.WorksheetFunction.Fixed(Round(Getal, 2), 2)
    Case 1 To 100000
        afgerond = Application.WorksheetFunction.Fixed(Round(Getal, 1), 1)
        If afgerond > 1000 Then
            afgerond = Round(Getal, 1) * 1
        Else
            afgerond = afgerond
        End If
End Select

Afronden_even = afgerond

End Function

Met de worksheetfunctie fixed(round.. worden de getallen eindigend op een 5 en 12 nullen, netjes afgerond naar het dichtstbijzijnde even getal. Voorbeeld 996.65 wordt 996.6
Ook wordt met deze functie een geheel getal gepresenteerd met 1 decimaal. Voorbeeld: 565.00000 wordt 565.0
Wat niet lukt is i.d.g. voorkomen van een floating point in de presentatie. Voorbeeld: 1000.0000 wordt 1,000.0 i.p.v. 1000.0.

In het tweede gedeelte gaat de afronding naar het dichtstbijzijnde even getal goed, zo ook notatie zonder floating point, maar lukt het weer niet om gehele getallen te presenteren met 1 decimaal nauwkeurig.

De getal notatie in het werkblad staat op standaard. In het werkblad zelf heb ik nog geprobeerd om met de functie Vast 1 decimaal te krijgen en dat lukt ook alleen krijg ik dan weer een coma in getallen >1000
 

Bijlagen

  • afronden+format.xlsm
    20,1 KB · Weergaven: 38
Laatst bewerkt:
Kun je even in het voorbeeldbestand met de hand zetten wat het gewenste resultaat moet zijn ?
 
In de bijlage wat extra getallen toegevoegd en een extra kolom met de gewenste uitkomst.
 

Bijlagen

  • afronden+format.xlsm
    20,5 KB · Weergaven: 47
Zijn die punten in kolom C bedoeld of slordigheid ?
 
Gewenst, zoals je vroeg.

Zoals je misschien ziet gaat het met deze code alleen NIET goed met GEHELE getallen >= 1000.
 
Je mist the true (1) false (0) boolean aan het eind van de fixed formule.
Plus ik zou de if >100 ook vertalen naar een case en de opmaak formule consequent houden.

Code:
Function Afronden_even(Getal) As Variant

Select Case Getal
    Case 0.1 To 0.9999999
        afgerond = Application.WorksheetFunction.Fixed(Round(Getal, 2), 2)

    Case 1 To 1000
        afgerond = Application.WorksheetFunction.Fixed(Round(Getal, 1), 1, 1)
    Case Is >= 1000
        afgerond = Application.WorksheetFunction.Fixed(Round(Getal, 1), 1, 1)
    Case Else
        afgerond = afgerond
End Select

Afronden_even = afgerond

End Function
 
Volgens mij is het aanpassen van de celeigenschappen in number met 1 decimaal ook al voldoende.

.WorksheetFunction is niet nodig. (mag weggelaten worden)
 
'True' = -1 in VBA, maar elk logische waarde = "WAAR" in die optionele parameter.

Heb je ze gelijk allemaal.
Code:
Case Is > 1
        afgerond = Application.Fixed(Round(Getal, 1), 1, -1)
 
Op verzoek heropend.
 
Bedankt voor het heropenen, maar ik had de vraag al in een ander draadje geopend.
Excuses voor het ongemak.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan