Återkommer till mitt problem med Decimaler. Vore det inte bättre att överföra hela decimaltalet till Excell men sedan sätta cellformateringen i Excell att bara visa önskat antal decimaler, t ex Tack för era svar! Varför inte nåt i stil med Jodå! Tack Martin! Du kan göra det i ett steg,Excel Konvertering till tal
Jag har en AccessDB med fält som innehåller fler decimaler än jag vill ha med i en Excel-redovisning.
Visat sig att det inte är möjligt att rätta till problemet i AccessDB så att jag där skulle mata in enbart tal avrundade till 2 decimaler.
Istället formaterar jag om de värden jag läser från AccessDb vid inläsningstillfället och lagrar dem med 2-decimaler i Excelbladet med nedanstående VBA-kod:
Range(sRange) = Format((rsManadsUppgift.Fields("SaldotillNastaMan")), "0#.##")
Finns det ev. bättre sätt att formattera?
Ovanstående ger mig mina värden med 2-decimaler i mitt Excelblad. Problemet är att de lagras som en textsträng. Ett värde blir då t.ex:
00, eller
-33,2 eller
-377,42
Alltid vänsterjusterat i kolumnen (utan apostrof).
Hur kan jag enkelt konvertera innehållet(text) till tal?
Använder jag funktionen ' Range(sRange) = Val(Range(sRange)) så blir endast heltalsdelen omvandlad till tal. Jag får t.ex värdena:
0
-33
-377
Hur får jag alltså med även decimaldelen?
I det fall att jag markerar en av cellerna som innehåller ett textvärde, så får jag möjlighet att använda en funktion ”Konvertera till tal”. Den funktionen gör jobbet att förvandla hela textsträngen -377,42 till ett korrekt numeriskt värde med decimaler, men hur kommer jag åt den funktionen med VBA-kod?
En annan variant vore att använda ”klistra in special” och multiplicera med 1. Men hur kommer man i så fall åt att utföra ”Klistra in special” via VBA-kod?
Tacksam för svar/ HarrySv: Excel Konvertering till tal
Range(sRange).NumberFormat = "0.00"
Att Excell tror att det är en sträng beror troligtvis på det kända problemet med "," och "." som decimalavskiljare, prova att använda följande:
Range(sRange) = CDbl(rsManadsUppgift.Fields("SaldotillNastaMan"))
Om jag komer ihåg rätt så ska CDbl konvertera riktigt till flyttal oavsett om det är "." eller "," som decimalavskiljareSv:Excel Konvertering till tal
Om jag överför hela decimaltalet till excel så blir summeringen av kolumnerna fel eftersom summeringen görs med fler decimaler än de som visas.
Använder jag : Range(sRange).NumberFormat = "0.00" så finns alla decimaler (fler än 2) kvar i cellerna.
En lösning som fungerar ser ut såhär:
Range(sRange) = Format((rsManadsUppgift.Fields("SaldotillNastaMan")), "0#.##")
Range(sRange) = CDbl(Range(sRange))
Då formateras först värdet till en textsträng med 2decimaler varefter CDbl konverterar talet till ett flyttal.
Det handlar om ett stort antal fält, så
finns det bättre lösningar så tackar jag och tar emot.
mvh/HarrySv: Excel Konvertering till tal
Range(sRange) = Round(Range(sRange),2)Sv:Excel Konvertering till tal
Range(sRange) = Format((rsManadsUppgift.Fields("SaldotillNastaMan")), "0#.##")
Range(sRange) = Round(Range(sRange),2)
Fungerar lika bra men på vilket sätt är det en bättre lösning?Sv:Excel Konvertering till tal
Du har rätt. Genom att använda: Range(sRange) = Round(Range(sRange),2)
så slipper man formatera värdet först till en textsträng och
lösningen blir istället såhär:
Range(sRange) = rsManadsUppgift.Fields("SaldotillNastaMan")
Range(sRange) = Round(Range(sRange),2)
alltså en bättre lösning.
mvh/HarrySv: Excel Konvertering till tal
Range(sRange) = Round(rsManadsUppgift.Fields("SaldotillNastaMan") ,2)