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:
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:
Dim dDigits As Double
Dim iCount As Integer
Dim iRoundDigits As Integer
Dim rArea As Range
Dim rCell As Range
Dim rRangeToRound As Range
Dim sFormatstring As String
Dim vAnswer As Variant
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 = CInt(Application.Max(1, vAnswer))
On Error GoTo 0
For Each rArea In rRangeToRound.Cells
For Each rCell In rArea
If IsNumeric(rCell.Value) And rCell.Value <> "" Then
sFormatstring = "0"
If rCell.Value = 0 Then
dDigits = 3
Else
dDigits = Log(Abs(rCell.Value)) / Log(10)
dDigits = -Int(dDigits) + iRoundDigits - 1
dDigits = Application.Min(Len(Abs(rCell.Value)), dDigits)
End If
If dDigits >= 1 Then
If Int(rCell.Value) = 0 Then
sFormatstring = sFormatstring & "." & String(dDigits - 1, "0")
Else
sFormatstring = sFormatstring & "." & String(dDigits, "0")
End If
ElseIf dDigits < 0 Then
sFormatstring = sFormatstring & "." _
& String(iRoundDigits - 1, "0") & "E+00"
End If
rCell.NumberFormat = sFormatstring
End If
Next rCell
Next rArea
End Sub
Listing 1: Code om het formaat van getallen zodanig te wijzigen zodat alleen significante cijfers worden getoond.
Veelgestelde vragen
Wat is het belang van het weergeven van het juiste aantal significante cijfers bij meetresultaten?
Waarom is het lastig om getallen van verschillende orde grootte in Excel eenvoudig af te ronden?
Welke problemen ervaren mensen bij het interpreteren van wetenschappelijke notatie in Excel?
Hoe werkt de VBA-functie die getallen omzet naar een opgegeven aantal significante cijfers?
Wat doet de VBA-code als een celwaarde gelijk is aan nul?
Hoe bepaalt de VBA-code het aantal decimalen voor het afronden van een getal?
Waarom is wetenschappelijke notatie soms minder geschikt voor rapportage aan managers?
Wat is het doel van de InputBox in de VBA-functie RoundToDigits?
Hoe wordt het getalsformaat aangepast in de VBA-code om significante cijfers weer te geven?
Welke stappen onderneemt de VBA-code om fouten tijdens het afronden te voorkomen?

Vragen, suggesties of opmerkingen