JKP Application Development Services.

                    Microsoft Office Application Development

Round2Digits

Up • Beschadigde mappen • Macro Verspreiden • Excel Namen • Opstart Problemen • Vergelijking plotten • Show Picture • Round2Digits • Control Events • Custom Find • FormuleFoutControle • Events uitschakelen • WebQuery • Undo met Excel VBA • XML en Excel 2003 • Selecteer een bereik (VBA) • Transponeer Tabel • VBE Vensters dokken • Een invoegtoepassing bijwerken

•  •

Search Zoeken

WWW
This site

Go to Ga Naar
Home
Up

Donate Donaties
Did you find something helpful on my site? Consider a donation!
Heeft u iets gevonden waar u wat aan had? Overweeg dan een donatie!

 

Getallen formatteren zodat alleen significante cijfers worden getoond

Inleiding

Bij het analyseren van meetresultaten is het gebruikelijk om deze bij rapportage weer te geven met het juiste aantal significante cijfers. Dit aantal hangt meestal af van de nauwkeurigheid van het hele meetproces (monstername, monsterpreparatie, analyse, omrekening naar gewenste eenheden).

Hoewel Excel verschillende methoden kent om getallen af te ronden (via functies of via het getalsformaat van de cel), is er geen methode om eenvoudig getallen van verschillende orde grootte af te ronden:

Getal Weergave
1234567 1,23E+6
1,234567 1,23
0,001234567 0,00123

Natuurlijk zou gebruik gemaakt kunnen worden van wetenschappelijke notatie (zie figuur 1), maar mijn ervaring heeft geleerd dat veel mensen (inclusief managers) moeite hebben met het interpreteren van getallen als 1.23E-1, terwijl men 0,123 wel kan bevatten.

Figuur 1: Cel Eigenschappen, Getal, wetenschappelijke notatie

Om deze reden heb ik onderstaande functie geschreven, welke ale getallen in de selectie omzet naar het aantal opgegeven significante cijfers:

Sub RoundToDigits()
    Dim rCell As Range
    Dim dDigits As Double
    Dim iRoundDigits As Integer
    Dim sFormatstring As String
    Dim iCount As Integer
    Dim vAnswer As Variant
    Dim rRangeToRound As Range
    On Error Resume Next
    Set rRangeToRound = Selection
    If rRangeToRound Is Nothing Then Exit Sub
    vAnswer = InputBox("How many digits?", "Rounding function")
    If TypeName(vAnswer) = "Boolean" Then Exit Sub
    If vAnswer = "" Then Exit Sub
    iRoundDigits = Application.Max(1, vAnswer)
    On Error GoTo 0
    For Each rCell In rRangeToRound.Cells
        If IsNumeric(rCell.Value) And rCell.Value <> "" Then
            sFormatstring = "0"
            If rCell.Value = 0 Then
                dDigits = 3
            Else
                dDigits = Log(Abs(Round(rCell.Value, iRoundDigits - 1 _
                          - Log(Abs(rCell.Value)) / Log(10)))) / Log(10)
                dDigits = -Int(dDigits) + iRoundDigits - 1
                dDigits = Application.Min(Len(Abs(rCell.Value)), dDigits)
            End If
            If dDigits >= 1 Then
                sFormatstring = sFormatstring & "." & String(dDigits, "0")
            ElseIf dDigits < 0 Then
                sFormatstring = sFormatstring & "." & String(iRoundDigits - 1, "0") _
                                & "E+00"
            End If
            rCell.NumberFormat = sFormatstring
        End If
    Next

End Sub

Listing 1: Code om het formaat van getallen zodanig te wijzigen zodat alleen significante cijfers worden getoond.

Commentaar

Nu je het einde van dit artikel hebt bereikt, zou ik om je mening willen vragen. Wat vond je ervan?

Klik hier om mij een mailtje te sturen met je opmerkingen en suggesties.

    Subscribe in a readerpowered by longhead.com

Use the contact page to issue questions or comments about this website.
Copyright © 2003-2008 JKP Application Development Services