Avatar billede bufli Mester
05. april 2021 - 07:45 Der er 3 kommentarer og
1 løsning

Excel VBA - afrundingsfejl

Hej eksperter,

Jeg er ved at lave en makro, og får en regnefejl. Når man trækker 2 tal fra hinanden med 2 decimaler på, kan man ikke få et resultat med flere end 2 decimaler - men det gør jeg. En løsning kan være at bruge afrunding, men det er jo ikke at løse problemet - det er at omgå problemet. En simplificeret udgave af min kode ses herunder.

Her sættes variablen "Indbetaling" til 104953,98, og en anden variabel "Salg" sættes til 105000. Så skal forskellen beregnes ved at trække de 2 tal fra hinanden, og så bliver resultatet i mit Immediate window 46,0200000000041

Er der nogen der kan sige mig hvad jeg gør galt. Jeg har ikke det sorte bælte i VBA, men prøver så godt jeg kan. Min eneste mistanke har gået på, om det er forkert at jeg dim'er mine variable som Double - men det synes jeg nu virker rigtigt - bortset fra at resultatet bliver forkert :-(

Sub Test()
    Dim Salg As Double
    Dim Gebyr As Double
    Dim Indbetaling As Double
    Indbetaling = 104953.98
    Dim ValueCell
    ValueCell = "F" & ActiveCell.Row
'    Dim BilagCell
'    BilagCell = "C" & ActiveCell.Row
'    Dim BilagValue As Double
'    BilagValue = Range(BilagCell).Value
    Salg = 105000
    Gebyr = Salg - Indbetaling
    TextBox_Gebyr.Text = Gebyr
End Sub
Avatar billede ebea Ekspert
05. april 2021 - 08:20 #1
Har du formateret dine celler i kolonne F, til at være med 2 decimaler?
Avatar billede store-morten Ekspert
05. april 2021 - 08:27 #2
Gebyr = Format(Salg - Indbetaling, "#,##0.00")
Avatar billede ebea Ekspert
05. april 2021 - 08:29 #3
Ellers kan du prøve at køre denne lille test:

Sub x()
    Dim v As Variant
    With Range("F1")
        .Formula = 125.5555
        .NumberFormat = "0.00"
        v = .Value  'v er aktuelt format (f.eks. 124,00)
       
        .Offset(, 1).Value2 = v 'G1 er afrundet til 2 decimaler
        .Offset(, 2).Value = v  'H1 er ikke afrundet til 2 decimaler
    End With
End Sub
Avatar billede bufli Mester
05. april 2021 - 08:45 #4
Hej,

Jeg fandt løsningen et andet sted på nettet. Ved at dimme som Currency regnes der rigtigt

Sub Test()
    Dim Salg As Currency
    Dim Gebyr As Currency
    Dim Indbetaling As Currency
    Indbetaling = 104953.98
    Salg = 105000
    Gebyr = Salg - Indbetaling
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester