Avatar billede lunddata Nybegynder
07. januar 2007 - 14:21 Der er 15 kommentarer og
1 løsning

Afrunding igen

Jeg slås med afrunding i vba.

Jeg ønsker at afrunde resultatet i celle c1 til antal decimaler givet i celle d1. Når der er afrundet skal der kunne regnes videre med resultatet i c1 uden at der er flere decimaler spøgende i baggrunden (altså antallet af decimaler skal i videre beregninger være som ønsket i celle d1)
Er der en kode hertil?
Avatar billede kabbak Professor
07. januar 2007 - 14:31 #1
Hvis du taster værdien ind i Celler enkeltvis, så virker denne på hele C kolonnen.

Koden skal være i arkets modul

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 Then 'virker på alle celler i kolonne C
        Application.EnableEvents = False
        Target = Round(Target, Target.Offset(0, 1))
        Application.EnableEvents = True
    End If
End Sub
Avatar billede kabbak Professor
07. januar 2007 - 14:36 #2
Jeg har i koden, gået ud fra, at du skriver antal decimaler ud for hver celle.
Avatar billede hugohann Nybegynder
07. januar 2007 - 15:08 #3
En mulighed er også at skrive direkte i cellen:

=(HELTAL((12,345678*10^($D$1)))/10^($D$1))

den skriver dog kum max. det antal decimaler som er i tallet.
Avatar billede lunddata Nybegynder
07. januar 2007 - 16:01 #4
Har testet..
Hvis jeg arbejder videre med forslaget fra hugohann vil der kunne fremkomme fejl som denne:
0,649 - 0,564 = 0,0850000000000001
Kabbaks ide er jeg ikke helt med på da jeg ønsker at celle d1 altid angiver antallet af decimaler i tallet i celle c1 og smider flere decimaler væk efter afrunding.
Avatar billede kabbak Professor
07. januar 2007 - 16:09 #5
Her virker den kun på C1 og den virker kun hvis du fysisk taster  eller kopierer tallene ind i cellen

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$1" Then 'virker på C1
        Application.EnableEvents = False
        Target = Round(Target, [D1])
        Application.EnableEvents = True
    End If
End Sub
Avatar billede kabbak Professor
07. januar 2007 - 16:14 #6
den kan også laves så C1 ændres, når du ændre tallet i D1

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$1" Then 'virker på C1
        [C1] = Round([C1], [D1])
    End If
End Sub
Avatar billede lordnelson Seniormester
07. januar 2007 - 16:23 #7
Range("c1") = FormatNumber(Range("c1"), Range("d1"))

Ln
Avatar billede lunddata Nybegynder
07. januar 2007 - 18:16 #8
Jeg har forsøgt mig lidt frem efter ovennstående indlæg, men kan stadigvæk fremprovokere fejl. Måske er det fordi mine tal fremkommer ved slumpfunktionen.
Jeg prøver at komme lidt videre ved at henvise til:
http://www.data.lundgraasten.dk/Subtraktion.xls
Jeg har her forsøgt mig med det sidste forslag fra kabbak
Avatar billede kabbak Professor
07. januar 2007 - 18:29 #9
Man kan kun have 1 Private Sub Worksheet_Change

hvis den skal virke på flere tilføjes de i samme kode

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$j$5" Then    'kabbaks kode
        [aw14] = Round([aw14], [j5])
    End If
   
    If Target.Address = "$j$6" Then  'kabbaks kode
        [ay14] = Round([ay14], [j6])
    End If

End Sub
Avatar billede lunddata Nybegynder
07. januar 2007 - 18:34 #10
Ok, men jeg får stadigvæk fejl efter at have rettet til at have 1 Private Sub Worksheet_Change
Avatar billede kabbak Professor
07. januar 2007 - 20:09 #11
Kolonne E er ikke bred nok, den viser kun 2 af decimalerne, gør den bredere, så du kan se alle.

Det er nok der fejlen er ??
Avatar billede lunddata Nybegynder
07. januar 2007 - 22:01 #12
Selvom jeg gør kolonnerne nok så brede hjælper det ikke.
Resultatet af hver enkelt opgave indtastes i celle i14 og når der skal rettes opgave trykkes på knappen "Ret opgaver". Det indtastede resultat samenlignes med j9. Selvom tallene i i14 og j9 er lig med hinanden forekommer der af og til meddelelse om at opgaven ikke er regnet rigtig. Er der fejl i makroerne bag knapperne?
Avatar billede excelent Ekspert
07. januar 2007 - 22:34 #13
i Sub Resultatundersøgelse() linie 7 hvor følgende linie er :
If [i14] = [aj9] And [i14] <> "" Then
kan du prøve at ændre til :
If Round([i14], 2) = Round([aj9], 2) And [i14] <> "" Then

her er der afrundet til 2 decimaler, men det skal du ændre til det antal decimaler
som er valgt i arket,- har ikke lige kunnet finde hvor i koden dette angis
men hvis det fx. var i en celle fx. A1, så skal linien se sådan ud:

If Round([i14], range("A1").value) = Round([aj9], range("A1").value) And [i14] <> "" Then
Avatar billede lunddata Nybegynder
08. januar 2007 - 08:25 #14
Så smukt, så smukt!
Lille årsag, stor virkning.
Du er som sædvanlig meget skarpsynet.
TUSIND TAK!
Lægger du et svar..
Avatar billede lunddata Nybegynder
08. januar 2007 - 09:49 #15
Ovenstående var til excelent
Avatar billede excelent Ekspert
08. januar 2007 - 12:49 #16
ok velbekom
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
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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