*

Help!

Problemen met uw pc? De vrijwilligers van oplossing.be zoeken gratis met u mee! 8)

Meer weten over Oplossing.be?

Hoe stel ik een vraag?

Recent

Auteur Topic: beduidende cijfers  (gelezen 4834 keer)

Offline dhaeyer

  • Volledig lid
  • **
  • Berichten: 104
  • Oplossing.be
beduidende cijfers
« Gepost op: 15 mei 2007, 15:55:02 »
Hallo,
stel:  ik heb een aantal meetgegevens bijvoorbeeld: 1,000 en 0,987

Ik wil nu deze data omzetten in data van 2 beduidende cijfers.

Het aantal beduidende cijfers van een resultaat is het aantal cijfers van het resultaat, zonder rekening te houden met de nullen die het eerste, van 0 verschillend, cijfer voorafgaan.

Voorbeelden:

1   50,236 0 g:   dit meetresultaat heeft 6 bc
2   0,056 0 g:   dit meetresultaat heeft 3 bc
3   10,26 ml:   dit meetresultaat heeft 4 bc
4   26 km:    dit meetresultaat heeft 2 beduidende cijfers.


Omzetten wordt dus : 1,000 wordt 1,0 en 0,987 wordt 0,99.

Mijn vraag nu: kan ik automatiseren via Excel?

Dank bij voorbaat

Dirk


Win XP - IE 6.0 - Office 2003 - Frontpage

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.211
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: beduidende cijfers
« Reactie #1 Gepost op: 15 mei 2007, 17:31:39 »
Dirk, als ik het goed begrijp, wil je kolom 2 als het resultaat van kolom 1 zien?
  A           B     
1 50,236 0 g  50    
2 0,056 0 g   0,056 
3 10,26 ml    10    
4 26 km       26    

Sheet1

[Table-It] version 07 by Erik Van Geit


(dit naar jouw bovenstaand voorbeeld)

Heb je bij die meetwaarden ALTIJD de letters achter de cijfers, of kan het ook voorkomen dat ze er voor staan?

Groet, Leo

EDIT: Voorbeeldtabel met Table-IT gemaakt, ipv met 'spaties'
« Laatst bewerkt op: 15 mei 2007, 21:48:19 door RedHead »
______________________________

Groet, Leo

Offline dhaeyer

  • Volledig lid
  • **
  • Berichten: 104
  • Oplossing.be
Re: beduidende cijfers
« Reactie #2 Gepost op: 15 mei 2007, 19:05:55 »
Hallo Leo,
u heeft het inderdaad goed begrepen. Ik heb die tweede kolom nodig waarmee we dan verder rekenen (oa gemiddelde e.a.) Met als belangrijke voorwaarde: excel moet dan verder rekenen met 50 en niet met 50,2360.

De letters die er achter staan zijn de eenheden maar die mag u gewoon negeren. Op dit punt was mijn voorbeeld een beetje ongelukkig gekozen. Met andere woorden het gaat gewoon om de cijfers.

mvg
Dirk
Alvast dank voor de moeite van het zoeken
Win XP - IE 6.0 - Office 2003 - Frontpage

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.211
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: beduidende cijfers
« Reactie #3 Gepost op: 16 mei 2007, 01:03:15 »
Dirk, ik kon met formules niks verzinnen. Ik heb daarom een functie in elkaar gezet die alvast voor een deel doet wat je wilt....
Helaas lukt het me niet om het resultaat van de functie als decimal getal terug te geven, maar als textstring. Vervolgens wilde ik graag achter een getal dat kleiner is dan nul, maar slechts 1 getal heeft achter de 'komma-nullen' (voorbeeld: 0,009) er een nul achter plaatsen. Maar ook dat krijg ik op dit late uur niet meer voor elkaar... :'(
Morgen verder.....
Function BC(sText As String)
Dim sNummer As String, sStartNum As String
   
    i = Len(sText)
   
    For y = 1 To i
        sStartNum = Mid(sText, y, 1)
        Select Case sStartNum
            Case 0 To 9, ","
            sNummer = sNummer & sStartNum
        If x = 1 Then x = 2
        End Select
        If Val(sStartNum) > 0 Then x = x + 1
        If x >= 2 Then Exit For
    Next y
   
    If (x = 1 And sNummer < 0) Then sNummer = sNummer & 0
   
    If sNummer = "" Then sNummer = "#N/A"
   
    BC = sNummer
   
End Function

  A           B     C   
1 50,236 0 g  50    50   
2 he 0,08 g   0,08 0,08
3 10,26 ml    10    10   
4 26 km       26    26   
5 "henk 1           1   

Sheet1

[Table-It] version 07 by Erik Van Geit
RANGE FORMULA (1st cell)
C1:C5 =BC(A1)

[Table-It] version 07 by Erik Van Geit

Groet, Leo

P.s. Erik, als ik hierboven hele domme dingen gedaan heb, laat je dat dan ff weten? ;)

EDIT: bestandje toegevoegd...
EDIT2: Table-IT tabel in kolommen gezet
« Laatst bewerkt op: 18 mei 2007, 09:21:25 door RedHead »
______________________________

Groet, Leo

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.211
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: beduidende cijfers
« Reactie #4 Gepost op: 16 mei 2007, 09:16:01 »
Dirk, wat me nu net te binnen schiet (lukte gisteren avond duidelijk niet meer ;D). Wat moet er gebeuren met een waarde van bijvoorbeeld 116, 1481 enzovoorts...?  ???. Ik kan me voorstellen dat je dan toch meer dan 2 cijfers wilt zien.

O jeeee... Ik zie nu ook dat het getal ook netjes afgerond moet worden. Hmmm, mijn functie breekt alleen maar keihard af.

Affijn, nog een hoop om mee te stoeien.

Groet, Leo
______________________________

Groet, Leo

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.211
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: beduidende cijfers
« Reactie #5 Gepost op: 16 mei 2007, 11:20:36 »
Toch nog ff bezig geweest... Dit werkt (op de afronding en de getallen groter dan 99 na dan....)Function BC(sText As String)
Dim sNummer As String, sStartNum As String
Dim dGetal As Double

    'bepaal de lengte van de inhoud van de cel
    i = Len(sText)
   
    'ga char voor char door de string om te zoeken naar cijfers
    For y = 1 To i
        sStartNum = Mid(sText, y, 1)
        'via een select case zorgen voor een (decimaal) getal (met komma)
        Select Case sStartNum
            Case 0 To 9, ","
            sNummer = sNummer & sStartNum  'bouw het nummer op...
            'als x 1 is, moet x op 2 gezet worden om daarna de for...next lus te kunnen verlaten
            If x = 1 Then x = 2
        End Select
       
        'start de teller om na 2 getallen de lus af te kunnen breken
        If Val(sStartNum) > 0 Then x = x + 1
        'de 'twee' getallen zijn bereikt! Verlaat de lus
        If x >= 2 Then Exit For
    Next y
         
    'zet de string om in variabele met declaratie 'double' om een 'getal' ipv een 'string' door te geven
    dGetal = sNummer
   
    BC = dGetal
       
End Function

Groet, Leo
« Laatst bewerkt op: 16 mei 2007, 11:23:43 door RedHead »
______________________________

Groet, Leo

Offline Erik Van Geit

  • Ervaren lid
  • ***
  • Berichten: 306
  • Geslacht: Man
Re: beduidende cijfers
« Reactie #6 Gepost op: 16 mei 2007, 17:44:15 »
Hallo,

Vooraleer mijn functie hier neer te zetten, lijkt het me nuttig om eerst de resultaten te tonen.
Is dit wat je wil, Dirk?
Zo niet, verklaar dan waarom.
   A                    B     
 1 INPUT                OUTPUT
 2 er is 5 liter nodig  5     
 3 he 000,08 g          0,08   
 4 10,262 ml            10     
 5 26 km                26     
 6 verlies is -0,054446 -0,054
 7 5454,123 appels      5500   
 8 456                  460   
 9 0                    0     
10 -0,0558              -0,056

Blad2

[Table-It] version 07 by Erik Van Geit

beste groeten,
Erik
« Laatst bewerkt op: 16 mei 2007, 17:52:41 door Erik Van Geit »

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.211
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: beduidende cijfers
« Reactie #7 Gepost op: 16 mei 2007, 19:42:38 »
Erik, als jouw tabel het resultaat is van een door jou geschreven functie, kan IK al niet meer wachten op je code... ;D (goed gevonden trouwens, die negatieve getallen)

Groet, Leo
______________________________

Groet, Leo

Offline dhaeyer

  • Volledig lid
  • **
  • Berichten: 104
  • Oplossing.be
Re: beduidende cijfers
« Reactie #8 Gepost op: 17 mei 2007, 09:17:20 »
Hallo Erik en Leo,
vooraf bedankt voor al die inspanningen.

@ Erik:
de gegeven resultaten zijn inderdaad wat ik wil. Een aantal kleine opmerkingen
5500 zou moeten worden 55 10^2 (2 beduidende cijfers) en
456 zou moeten worden 46 10^1 (terug 2 bc)

Nu de door u gekozen waarden liggen ver uit elkaar. Mijn vraag is echter bedoeld om labometingen te verwerken en om te zetten naar bijvoorbeeld 2bc. Vandaar dat deze meetwaarden dicht bij elkaar liggen. Het probleem dat hierbij kan ontstaan is het volgende:
data:
1,021  moet worden 1,0
1,072  moet worden 1,1
0,886  moet worden  0,89
0,883  moet worden 0,88

dus alles op 2bc én klassiek afronden (groter of meer dan 5 naar boven afronden)

In de data komt nooit tekst voor.

Met de nieuwe data moet Excel verder het gemiddelde berekenen.

Ideaal zou zijn indien ik bovendien het aantal bc zou kunnen kiezen. Dus een verwerking met één bc of een verwerking met 2 bc of met 3 bc... maar misschien is dit te veel gevraagd.

Nogmaals dank en groeten

Dirk


Win XP - IE 6.0 - Office 2003 - Frontpage

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.211
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: beduidende cijfers
« Reactie #9 Gepost op: 18 mei 2007, 07:47:18 »
Dirk, omdat ik het voor mezelf toch als een mooie oefening zag om 'ns met zelfgeschreven functies te werken, ben ik toch nog maar ff doorgegaan... ;D (en om toch óók wat resultaat te tonen, plaats ik 'm ook maar op de site, anders vind ik het zo jammer van het werk... ;D)
Function BC(sText As String)
Dim sNummer As String, sStartNum As String
Dim dGetal As Double
Dim i As Integer, x As Integer, y As Integer

    'bepaal de lengte van de inhoud van de cel
    i = Len(sText)
   
    'ga char voor char door de string om te zoeken naar cijfers
    For y = 1 To i
        sStartNum = Mid(sText, y, 1)
        'via een select case zorgen voor een (decimaal) getal (met komma)
        Select Case sStartNum
            Case 0 To 9, ","
            sNummer = sNummer & sStartNum  'bouw het nummer op...
            'als x 1 is, moet x op 2 gezet worden om daarna de for...next lus te kunnen verlaten
            If x = 2 Then x = 3
        End Select
       
        'start de teller om na 3 getallen de lus af te kunnen breken (=genoeg voor afronding!)
        If Val(sStartNum) > 0 Then x = x + 1
        'de 'drie' getallen zijn bereikt! Verlaat de lus
        If x >= 3 Then Exit For
    Next y
         
    'zet de string om in variabele met declaratie 'double' om een 'getal' ipv een 'string' door te geven
    dGetal = sNummer
   
    'bepaal of het een decimaalgetal is tussen de nul en één (nodig voor het afrondingsgetal)
    If dGetal < 1 And dGetal > 0 Then
        i = Len(dGetal)
        For y = 1 To i
            sStartNum = Mid(dGetal, y, 1)
            If Val(sStartNum) > 0 Then Exit For
        Next y
    End If
   
    'bepaal op hoeveel cijfers er afgerond moet worden
    Select Case dGetal
        Case 1 To 10
            AfrNr = 1
        Case 10 To 100
            AfrNr = 0
        Case Else   'getal tussen 0 en 1
            AfrNr = y - 1
    End Select
   
    BC = Round(dGetal, AfrNr)
       
End Function
Wat ik je nu geef, is voor mij het uiterste (ik zou namelijk niet weten hoe ik het volgende stukje zou moeten afhandelen).  Zolang je waarden tussen de +0 en de +99,99999.. liggen zal de functie dat doen wat jij wilt. Bij negatieve waarden of hoger dan 100 loopt het stuk.
   A                         B                  C       
 1 gegevens                  resultaat verwacht functie
 2 50,636 0 g                51                 51     
 3 he 0,05668 g              0,057              0,057   
 4 9,26 ml                   9,3                9,3     
 5 26 km                     26                 26     
 6 "henk 1                   1                  1       
 7                                                      
 8                                                      
 9 1,021548  moet worden 1,0 1                         
10 1,072  moet worden 1,1    1,1                       
11 0,886  moet worden  0,89  0,89                       
12 0,883  moet worden 0,88   0,88                       

Sheet1

[Table-It] version 07 by Erik Van Geit
RANGE   FORMULA (1st cell)
B9:B12  =BC(A9)
C2:C6   =BC(A2)

[Table-It] version 07 by Erik Van Geit
De omzetting van 1,0 naar 1 komt door Excel zelf. Tik maar 'ns 1.0 in een cel met een 'standaard' format en sluit af met enter.....

Maar goed, Erik zal ongetwijfeld met wel de juiste oplossing komen (gelukkig voor jou! ;)), maar tot die tijd kan je oefenen met de mijne (of niet natuurlijk ;D ;D ;D)

Groet, Leo
« Laatst bewerkt op: 18 mei 2007, 07:53:26 door RedHead »
______________________________

Groet, Leo

Offline dhaeyer

  • Volledig lid
  • **
  • Berichten: 104
  • Oplossing.be
Re: beduidende cijfers
« Reactie #10 Gepost op: 18 mei 2007, 09:17:25 »
Hallo Leo,
daarnet uw bestand gedownload en geprobeerd. Het werkt inderdaad prima tot aan 100. Prachtig werk én service. Mijn dank en misschien kan Erik het probleem van de "maximale waarde 99,99999" wegwerken.
mvg
Dirk
Win XP - IE 6.0 - Office 2003 - Frontpage

Offline RedHead

  • Ambassadeur
  • *****
  • Berichten: 1.211
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: beduidende cijfers
« Reactie #11 Gepost op: 18 mei 2007, 09:39:10 »
Dirk, dank voor je compliment. Waarschijnlijk kan ik 5500 nog wel omzetten naar 55 10^2 (letterlijke notatie), maar hoe kan je daarmee doorrekenen in Excel? Als ik dat intik in een cel wordt het een tekstwaarde waarmee niet te rekenen is.
Geef me raad en ik ga verder... ;)

Groet, Leo
______________________________

Groet, Leo

Offline Erik Van Geit

  • Ervaren lid
  • ***
  • Berichten: 306
  • Geslacht: Man
Re: beduidende cijfers
« Reactie #12 Gepost op: 18 mei 2007, 10:39:55 »
Hallo,

Op dit moment ontbreekt het me aan meer tijd. Beetje vakantie en mijn 4 jongens lopen hier rond :-)

Deze functie werkt zoals ik het graag zou willen (zonder de daarna toegevoegde opmerking van 12 10^2), maar doet wat teveel, namelijk getal uit de cel distilleren.
Option Explicit

Function SignifNrs1(ByRef c As String, SN As Long) As Double
'SN                         'Significant Numbers
Dim i As Long
Dim FSN As Long             'First Significant Number
Dim TempStr As String
Dim TempVal As String
Dim DS As String            'Decimal Separator
Dim RF As Long              'Round Factor
Dim DP As Long              'DS Position
Dim sign As Long

    If SN < 1 Then
    SignifNrs1 = 0
    Exit Function
    End If

    sign = 1

    For i = 1 To Len(c)
    TempStr = Mid(c, i, 1)
   
        If IsNumeric(TempVal & TempStr) Then

            If TempVal = vbNullString And i > 1 Then
            If Mid(c, i - 1, 1) = "-" Then sign = -1
            End If
           
        TempVal = TempVal & TempStr
       
        Else
       
        'exit after last consecutive numeric
        If TempVal <> vbNullString Then Exit For

        End If

    Next i
    TempVal = CDbl(TempVal)
    DS = Application.DecimalSeparator
    DP = InStr(TempVal, DS)
   
    FSN = 1
    If TempVal < 1 Then
    i = 2
        Do
        i = i + 1
        Loop While CInt(Mid(TempVal, i, 1)) = 0
    FSN = i
    End If
   
    RF = IIf(DP, FSN - DP + SN - 1 - (DP > FSN), SN - Len(TempVal))
    SignifNrs1 = Application.WorksheetFunction.Round(TempVal * sign, RF)

End Function

RESULTATEN
   A                    B       C       D        E         
 1                      1       3       7        8         
 2 er is 55 liter nodig 60      55      55       55       
 3 he 000,08 g          0,08    0,08    0,08     0,08     
 4 14,262 ml            10      14,3    14,262   14,262   
 5 26 km                30      26      26       26       
 6 -0,054446            -0,05   -0,0544 -0,05445 -0,054446
 7 5454,123 euro        5000    5450    5454,123 5454,123 
 8 123                  100     123     123      123       
 9 1254                 1000    1250    1254     1254     
10 18351                20000   18400   18351    18351     
11 1,2                  1       1,2     1,2      1,2       
12 1,1525456            1       1,15    1,152546 1,1525456
13 1234567,1            1000000 1230000 1234567  1234567,1

Blad2

[Table-It] version 07 by Erik Van Geit
RANGE   FORMULA (1st cell)
B2:E13  =SignifNrs1($A2,B$1)

[Table-It] version 07 by Erik Van Geit

Het is makkelijk om hiervan een functie te maken die positieve getallen zonder tekst  aanvaard, voor negatieve is er een klein probleempje dat zicht voordoet in uitzonderlijke gevallen, dat ik nog moet oplossen, maar nu geen tijd.

best groeten,
Erik

Offline Erik Van Geit

  • Ervaren lid
  • ***
  • Berichten: 306
  • Geslacht: Man
Re: beduidende cijfers
« Reactie #13 Gepost op: 19 mei 2007, 01:14:45 »
De zaak nog iets verder uitgewerkt.
functie 1: alphanumerics (gemengd cijfers en letters)
functie 2: enkel getallen aanvaard
functie 3: enkel positieve getallen krijgen output, anders 0

Resultaten in tabel: uiteraard staat er voor de 2 laatste functies #WAARDE, omdat de input letters bevat.
   A              B             C       D        E        F                G       
 1                alphanumerics         numeric           positive numeric         
 2                1             3       1        3        1                3       
 3 55 liter nodig 60            55      #WAARDE! #WAARDE! #WAARDE!         #WAARDE!
 4 he 000,08 g    0,08          0,08    #WAARDE! #WAARDE! #WAARDE!         #WAARDE!
 5 14,262 ml      10            14,3    #WAARDE! #WAARDE! #WAARDE!         #WAARDE!
 6 26 km          30            26      #WAARDE! #WAARDE! #WAARDE!         #WAARDE!
 7 -0,054446      -0,05         -0,0544 -0,05    -0,0544  0                0       
 8 5454,123 euro  5000          5450    #WAARDE! #WAARDE! #WAARDE!         #WAARDE!
 9 123            100           123     100      123      100              123     
10 1254           1000          1250    1000     1250     1000             1250     
11 18351          20000         18400   20000    18400    20000            18400   
12 1,2            1             1,2     1        1,2      1                1,2     
13 1,1525456      1             1,15    1        1,15     1                1,15     
14 1234567,1      1000000       1230000 1000000  1230000  1000000          1230000 

Blad2

[Table-It] version 07 by Erik Van Geit
RANGE   FORMULA (1st cell)
B3:C14  =SignifNrs1($A3,B$2)
D3:E14  =SignifNrs2($A3,D$2)
F3:G14  =SignifNrs3($A3,F$2)

[Table-It] version 07 by Erik Van Geit


De functies op een rijtje:
Option Explicit

Function SignifNrs1(ByRef c As String, SN As Long) As Double
'Erik Van Geit
'alphanumeric input allowed

'EXAMPLE
'   A              B             C       D        E
 '2                1             3       7        8
 '3 aaa 55 bbb 123 60            55      55       55
 '4 ccc 000,08 ddd 0,08          0,08    0,08     0,08
 '5 14,262 ml      10            14,3    14,262   14,262
 '6 ok -26         -30           -26     -26      -26
 '7 -0,054446      -0,05         -0,0544 -0,05445 -0,054446
 '8 5454,123 euro  5000          5450    5454,123 5454,123
 '9 123            100           123     123      123
'10 1254           1000          1250    1254     1254

'SN                         'Significant Numbers
Dim i As Long
Dim FSN As Long             'First Significant Number
Dim TempStr As String
Dim TempVal As String
Dim DS As String            'Decimal Separator
Dim RF As Long              'Round Factor
Dim DP As Long              'DS Position
Dim sign As Long

    If SN < 1 Then
    SignifNrs1 = 0
    Exit Function
    End If

    sign = 1

    For i = 1 To Len(c)
    TempStr = Mid(c, i, 1)
   
        If IsNumeric(TempVal & TempStr) Then

            If TempVal = vbNullString And i > 1 Then
            If Mid(c, i - 1, 1) = "-" Then sign = -1
            End If
           
        TempVal = TempVal & TempStr
       
        Else
       
        'exit after last consecutive numeric
        If TempVal <> vbNullString Then Exit For

        End If

    Next i
    TempVal = CDbl(TempVal)
    DS = Application.DecimalSeparator
    DP = InStr(TempVal, DS)
   
    FSN = 1
    If TempVal < 1 Then
    i = 2
        Do
        i = i + 1
        Loop While CInt(Mid(TempVal, i, 1)) = 0
    FSN = i
    End If
   
    RF = IIf(DP, FSN - DP + SN - 1 - (DP > FSN), SN - Len(TempVal))
    SignifNrs1 = Application.WorksheetFunction.Round(TempVal * sign, RF)

End Function

Option Explicit

Function SignifNrs2(ByRef c As String, SN As Long) As Double
'Erik Van Geit
'only numberic input

'EXAMPLE
'   A              F        G        H         I
'2                 1        3        7         8
'3  aaa 55 bbb 123 #VALUE!  #VALUE!  #VALUE!   #VALUE!
'7  -0,054446      -0,05    -0,0544  -0,054446 -0,054446
'11 18351          20000    18400    18351     18351
'12 1,2            1        1,2      1,2       1,2
'13 1,1525456      1        1,15     1,152546  1,1525456
'14 1234567,1      1000000  1230000  1234567   1234567,1

'SN                         'Significant Numbers
Dim i As Long
Dim FSN As Long             'First Significant Number
Dim TempVal As String
Dim DS As String            'Decimal Separator
Dim RF As Long              'Round Factor
Dim DP As Long              'DS Position
Dim sign As Long

    If SN < 1 Or c = 0 Then
    SignifNrs2 = 0
    Exit Function
    End If

    TempVal = c
    sign = 1

    If TempVal < 0 Then
    sign = -1
    TempVal = CDbl(Mid(TempVal, 2, 999))
    End If

    DS = Application.DecimalSeparator
    DP = InStr(TempVal, DS)

    FSN = 1
    If TempVal < 1 Then
    i = 2
        Do
        i = i + 1
        Loop While CInt(Mid(TempVal, i, 1)) = 0
    FSN = i
    End If

    RF = IIf(DP, FSN - DP + SN - 1 - (DP > FSN), SN - Len(TempVal))
    SignifNrs2 = Application.WorksheetFunction.Round(TempVal * sign, RF)

End Function


Option Explicit

Function SignifNrs3(ByRef c As String, SN As Long) As Double
'Erik Van Geit
'only positive numbers
'EXAMPLE
'   A              F        G        H         I
'2                 1        3        7         8
'3  aaa 55 bbb 123 #VALUE!  #VALUE!  #VALUE!   #VALUE!
'7  -0,054446      0        0        0         0
'11 18351          20000    18400    18351     18351
'12 1,2            1        1,2      1,2       1,2
'13 1,1525456      1        1,15     1,152546  1,1525456
'14 1234567,1      1000000  1230000  1234567   1234567,1


'SN                         'Significant Numbers
Dim i As Long
Dim FSN As Long             'First Significant Number
Dim TempVal As String
Dim DS As String            'Decimal Separator
Dim RF As Long              'Round Factor
Dim DP As Long              'DS Position

    If SN < 1 Or c <= 0 Then
    SignifNrs3 = 0
    Exit Function
    End If

    TempVal = c
    DS = Application.DecimalSeparator
    DP = InStr(TempVal, DS)
   
    FSN = 1
    If TempVal < 1 Then
    i = 2
        Do
        i = i + 1
        Loop While CInt(Mid(TempVal, i, 1)) = 0
    FSN = i
    End If

    RF = IIf(DP, FSN - DP + SN - 1 - (DP > FSN), SN - Len(TempVal))
    SignifNrs3 = Application.WorksheetFunction.Round(TempVal, RF)

End Function


Ik ben er quasi zeker van dat een formule ook wel kan lukken... Als ik nog eens tijd heb...

fijn weekend!
Erik

Offline dhaeyer

  • Volledig lid
  • **
  • Berichten: 104
  • Oplossing.be
Re: beduidende cijfers
« Reactie #14 Gepost op: 19 mei 2007, 10:16:41 »
Hallo Erik en Leo,

@Erik
Sorry dat ik uw verlof heb verstoord maar wat een werk! Ik heb de code van de tweede functie eens geprobeerd en het werkt excellent. Ik moet eerlijk bekennen dat ik wel verloren loop in de code en ik dus dit eigenlijk dringend eens zou moeten gaan studeren. Nu ervaar ik wat studenten soms ervaren: "het werkt maar waarom het werkt..."

Wat bedoelt u juist met uw laatste opmerking " met een formule kan het ook wel lukken...". Is het de bedoeling dan met een formule ipv een functie te werken?

@Leo
5500 moet bij ons genoteerd worden als 55 10^2(afhankelijk van de metingen) . Immers in het eerste geval heb ik 4 bc , in het tweede geval 2bc. We werken dus met de bc's aangevuld met machten.

groeten
Dirk
Win XP - IE 6.0 - Office 2003 - Frontpage

 


Combell.com