Most Valuable Professional


subscribe to rss feed
Subscribe in a reader

Home > Nederlandse site > Artikelen > Round2Digits
This page in English

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.


Geef dit artikel een cijfer:

(72 keer beoordeeld. Gemiddelde beoordeling: 5.4)

Commentaar

Geef uw commentaar hier!!!

Uw naam (verplicht veld):

Uw e-mail adres (Niet verplicht, dit adres wordt niet getoond)

Uw verzoek of commentaar: