|
| Kommentar Fra : erling_l |
Dato : 11-10-05 21:53 |
|
Hej Zakia
Har eksperimenteret med det, men excel vil ikke acceptere det.
Bruger du formuleringen "=AFRUND(A4;0)" returneres indholdet af a4 afrundet til heltal. Skifter du "0" med "1" kommer 1 betydende decimal. Men skifter man til 0,25 afrunder den bare som heltal - beklager...
| |
| Kommentar Fra : Eyvind |
Dato : 11-10-05 22:31 |
|
Jeg har leget lidt og dette er ikke den færdige løsning
a1 12,35
b1 =HVIS(HØJRE(A2;2)>35;ERSTAT(A2;4;2;50);" ")
og det gælder kun til kr. 99,99 ellers skal der regnes med 3 cifre før , og
erstat skal skiftes med A2;5;2;
| |
| Kommentar Fra : Eyvind |
Dato : 11-10-05 22:48 |
|
rettelse
a1 12,35
b1 =HVIS(HØJRE(A1;2)>35;ERSTAT(A1;4;2;50);" ")
og det gælder kun til kr. 99,99 ellers skal der regnes med 3 cifre før , og
erstat skal skiftes med A1;5;2;
| |
|
Her er lidt VBA-kode - Excel stilles på laveste sikkerhedsniveau - indtastningsceller er p.t. C1:C10 - nu kan du forsøge:
Kode Private Sub worksheet_change(ByVal Target As Excel.Range)
Dim Beløb
On Error GoTo ingenBeløb
If Not Intersect(Target, Range("c1:c10")) Is Nothing Then
Target = decimalTilpas(Target.Value)
End If
Exit Sub
ingenBeløb:
End Sub
Private Function decimalTilpas(basisBeløb)
Beløb = CStr(basisBeløb)
x = InStr(Beløb, ",")
If x = 0 Then
Beløb = Beløb + ",00"
End If
kr = Left(Beløb, x - 1)
dec = Mid(Beløb, x + 1)
If dec <> "00" Then
decimalTilpas = beregnAfrund(kr, dec)
Else
decimalTilpas = Beløb
End If
End Function
Private Function beregnAfrund(kr, dec)
Dim øreListe(5), mindst, øre
øreListe(0) = 0
øreListe(1) = 25
øreListe(2) = 50
øreListe(3) = 75
øreListe(4) = 100
mindst = 100
øre = 0
For f = 0 To 4
diff = Abs(Val(øreListe(f)) - Val(dec))
If diff < mindst Then
mindst = diff
øre = øreListe(f)
End If
Next f
If øre = 100 Then
beregnAfrund = Val(kr) + 1
Else
beregnAfrund = Val(kr) + øre / 100
End If
End Function |
| |
|
Hej
Så tror jeg nok at jeg har en noget lettere løsning.
Hvis tallet står i celle A1, så kan man i en anden celle skrive:
=afrund(a1*4;0)/4
Inden i parantesen ganges med 4, hvorefter der foretages almindelig afrunding til helt kroner. Efter afrunding divideres igen med 4.
Venlig hilsen
Leo Lund
www.erhvervsbogforing.dk
| |
| Kommentar Fra : zakia1964 |
Dato : 12-10-05 14:26 |
|
Det var lidt at vælge imellem!
Til erling_l - ja det har jeg nemlig også prøvet uden gode resultater.
Til hansen9 - jeg kan intet finde hos Microsoft - heller ikke round! Jeg har installeret alle tilføjelsesprogrammer!
Til Eyvind - jeg havde håbet at jeg kunne undgå mellemregninger på cellers indhold. Forslaget er ellers godt - men havde måske håbet at en formatering af cellerne var mulig.
Til Supertekst - Respekt! din kode virkede efter lidt tilpasninger hist og her - smart tænkt! Men det er måske lidt upraktisk at man skal klikke på de celler der indeholder tal som man ønsker o nedrundet før de bliver o nedrundet. Desuden opdagede jeg en lille ting. I en celle stod der 14,48. Ved klik blev tallet rettet til 14,5. Men da jeg kom til at klikke igen blev tallet rettet til 14. Der skete ikke noget i de celler hvor decimalerne var rettet til 25, 75 eller 00. Jeg er ikke stiv nok i VBA til at gennemskue hvor det går galt!!!
Men din løsning er et godt alternativ, såfremt det ikke er muligt at lave en celle formatering. En celles indhold kan nemlig formateres til brøk delt i fjerdedele: 14.35 bliver da til 14 1/4. Formateringskoden er # ?/4.
Jeg har i dag prøvet at tilføje min egen formateringskode, som jeg i min naivitet troede bare var en tilpasning af # ?/4. Jeg kan godt finde ud af at tilføje en ny formateringkode - men jeg kan bare ikke finde ud af at lave den rigtigt!
| |
| Kommentar Fra : zakia1964 |
Dato : 12-10-05 14:32 |
|
Hej Leo.pedersen!
Dit svar kom ind efter jeg havde skrevet. God formel - den er da til at forstå!!!
Men som skrevet ovenover. Kan man ikke lave en formateringskode der kan klare arbejdet??
| |
|
Hej Marianne
Du kommentere ikke mit forslag, muligvis fordi du var ved at svare, hvorved mit forslag kommer til at stå før dit svar, så kan det nemt overses.
Hvis det blot er en ganske almindelig dansk afrunding til nærmeste 25 øre, så kan det gøres meget simpelt, således:
Hvis tallet står i celle A1, så kan man i en anden celle skrive:
=afrund(a1*4;0)/4
Dvs. inden i parantesen bliver tallet ganget med 4, hvorved man kan fjerne alle decimaler (afrund), når det er gjort, så dividere man med 4, for at komme til bage. Det er så "afrundet" til nærmeste 25 øre.
Venlig hilsen
Leo Lund
www.erhvervsbogforing.dk
| |
|
jeg tror ikke der er en formateringskode, men hvis det tal som skal afrundes er resultatet af en anden beregning, så lad denne beregning stå i en søjle som du gør usynlig (format skjul"), og skriv så min formel i en synlig søjle.
| |
| Kommentar Fra : zakia1964 |
Dato : 12-10-05 15:07 |
|
Hej Leo.pedersen!
Din formel virker hver gang! og det med at skjule kolonnen med de celler der skal afrundes er jeg helt med på. Det bliver nok min løsning hvis ikke der lige er én der kan lirke en formateringskode ud af ærmet!!! Jeg holder derfor spørgsmålet åbent lidt endnu! okay?
| |
|
Til Erling: Takker for de pæne ord. Har selv brugt formlen i mange år, og kan faktisk ikke huske om jeg selv fandt på den, eller fik den af en kollega.
Til Marianne: du holder bare spørgsmålet åbent, hvis der er en som har en formateringsløsning, så er jeg også selv interesseret i den.
| |
|
Det er ikke meningen at der skal klikkes på de uredigerede tal - i mit forslag har jeg arbejdet med, at beløbet indtastes i sin basis-udgave, for derved at blive "afrundet" - men hvis betingelsen er, at beløbene eksistere i forvejen - skulle programmet nok ændres lidt.
| |
| Kommentar Fra : Eyvind |
Dato : 12-10-05 17:01 |
|
Udbygning af den fra Leo.
a1 - 2,35
a2 - 3,85
a3 - 1,32
a4 - 8,27
a5 - =AFRUND((SUM(A1:A4))*4;0)/4 [15,75]
| |
| Kommentar Fra : zakia1964 |
Dato : 12-10-05 17:18 |
|
Hej Supertekst!
Jeg tastede først tallene ind efter jeg havde lavet VBA'en. Men når jeg tastede 14.48 ind i C1 så blev der ved med at stå 14,48 indtil jeg klikkede på tallet. Jeg tastede ellers tal ind i alle celler fra C1 til C10, men de blev først ændret ved klik!
Måske et versions-problem. Jeg har Excel 2000.
| |
|
Blot til orientering anvender jeg Office 2003
| |
| Kommentar Fra : zakia1964 |
Dato : 13-10-05 21:38 |
|
Hej Rosco40!
Der var lige en formel jeg havde overset! Jeg synes ellers jeg havde været igennem dem alle. Den er jo som skabt til formålet. Men jeg vil stadig gerne høre om der er nogen der kan lave et brugerdefineret format der kan løse problemet, så derfor forøger jeg med 100 point.
| |
| Kommentar Fra : xlEasy |
Dato : 14-10-05 00:17 |
|
Hej zakia1964
Interessant spørgsmål. Her er et brugerdefineret format. Det løser dit problem, men det giver 2 årsager til, at du ikke kan bruge et brugerdefineret format (BFF). Her er formatet:
[<0,5]"0,00";[<1]"0,50";"1,00"
Kode Tast Vis
0,1 0,00
0,5 0,50
0,8 0,50
1,1 1,00
500 1,00 |
Formatet fungerer sådan:
Kode [<0,5]"0,00";[<1]"0,50";"1,00"
[Betingelse1]Format1;[Betingelse2]Format2;FormatEllers |
Du kan altså bruge 2 betingelser med hvert sit format samt en instruks om et format, der bruges hvis ingen af betingelserne opfyldes.
1) Du kan ikke bruge BFF For at runde af skulle du bruge et format, der ser sådan ud (25øre afrunding - ikke øre afrunding):
Kode [<0,13]format1;[<0,38]format2;[<63]format3;[<0,88]format4; |
Du har brug for 4 betingelser, men kan kun bruge 2 + en diverse
2) Du kan ikke bruge en formel eller et format som betingelse. Det ville virke, hvis du kunne bruge
Kode Formel som betingelse: [MROUND(A1;0,25)];format;...
Format sombetingelse: [<#,13]format1; etc. |
... men det kan du ikke.
Hvis der mod forventning skulle findes en ren BFF-løsning, giver jeg også et point eller to. Jeg ville nok bruge løsningen med en ekstra kolonne.
Vh Bent
| |
|
Hej Marianne
Har lige læst det igennem igen, og hvis det er resultatet af en beregning som skal afrundes, så kan min løsning også bruges uden den ekstra kolonne.
Det gøres ganske enkelt ved at indarbejde beregningen i mit forslag.
F.eks. hvis der i søjle A står antal, i søjle B står enhedspris og der så i søjle C skal stå pris ialt.
Data: A1 = 3 : A2 = 1 : A3 = 7 samt B1 = 0,05 : B2 = 0,1 : B3 =7,61
Så skal der i C1 stå en formel som hedder: =A1*B1 det bliver i C1 til 0,15, og hvis formlen kopieres ned i C2 og C3, bliver de til 0,1 og 53,27
Hvis der så i C1 istedet står =AFRUND(((A1*B1)*4);0)/4 så bliver C1 til 0,25, C2 til 0,00 og C3 til 53,25.
Ved godt at jeg har indsat en parantes for meget omkring beregningen, men den skal der være hvis beregningen er mere kompliceret.
God fornøjelse
Leo
| |
| Kommentar Fra : Eyvind |
Dato : 15-10-05 19:48 |
|
eller denne enkle (stadig bygning på den fra Leo.)
a1 - 2,35
a2 - 3,18
a3 - =AFRUND((SUM(A1+A2))*4;0)/4 [5,5]
eller
A1 - 2,35 B1 - =AFRUND((SUM(A1))*4;0)/4 .......2,25
A2 - 3,68 B2 - =AFRUND((SUM(A2))*4;0)/4 .......3,75
b3 - = sum (b1:B2) .........................6
I stedet for (A1) kan sættes forskellige regnestykker i resultatcellen.
A3 - =AFRUND((SUM(A1+A2))*4;0)/4 .......6
| |
| Kommentar Fra : Rosco40 |
Dato : 17-10-05 13:05 |
|
Hvis du ønsker en VBA løsning virker denne.
Code
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim As Range
If Not Intersect(Target, Range("F9:F38")) Is Nothing Then
Application.EnableEvents = False
For Each cell In Target
Target.Value = Round(cell.Value * 2, 0) / 2
Next
Application.EnableEvents = True
End If
End Sub
| |
| Kommentar Fra : Rosco40 |
Dato : 17-10-05 13:09 |
|
Den viste afrunder til 0,50
Denne afrunder til 0,25
Code
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim As Range
If Not Intersect(Target, Range("F9:F38")) Is Nothing Then
Application.EnableEvents = False
For Each cell In Target
Target.Value = Round(cell.Value * 4, 0) / 4
Next
Application.EnableEvents = True
End If
End Sub
| |
| Kommentar Fra : xlEasy |
Dato : 17-10-05 14:05 |
|
Der mangler et 'IKKE' i mit indlæg:
'Det løser IKKE dit problem, men det giver 2 årsager til, at du ikke kan bruge et brugerdefineret format (BFF).'
Det bedste bud indtil videre på en ikke-BFF løsning synes er fra Rosco40: =MAFRUND(A1;0,25) ud fra et dogme-synspunkt: Opfind ikke noget, der er opfundet i forvejen. Problemet med vba-løsningerne (som også er gode) er, at den oprindelige værdi forsvinder.
| |
| Kommentar Fra : zakia1964 |
Dato : 17-10-05 14:16 |
|
Ja, der er efterhånden kommet flere bud. Til xlEasy - så kan jeg godt se din pointe. Et format kan ikke afrunde!
Leo.pedersen du kom med et forslag til en logisk formel der virker - men Rosco40 foreslog en formel der er skabt til formålet. Så jeg tror jeg lukker denne tråd nu og giver point til Rosco40.
Tak for hjælpen alle sammen!
| |
| Godkendelse af svar Fra : zakia1964 |
Dato : 17-10-05 14:19 |
| | |
| Du har følgende muligheder | |
|
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
| |
|
|