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:
Sub RoundToDigits()
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.