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!!!