Avatar billede wufs Nybegynder
09. august 2007 - 16:22 Der er 23 kommentarer og
1 løsning

Afrunding i excel

Hvordan sikrer man, at en talrække med x antal decimaler, hvoraf summen bliver eksempelvis 11 også bliver 11 efter der er afrundet til nul decimaler når man lægger de afrundede værdier sammen.

Eksempel:
Ved afrunding af nedenstående talrække til nul decimaler bliver summen af de afrundede tal 10 og ikke 11.

Talrække (ikke afrundet) giver 11:
0,49
0,97
2,15
1,09
1,14
1,68
1,30
2,18
Sum 11,00

Talrække (afrundet) giver 10:
0
1
2
1
1
2
1
2
Sum 10

Hvordan kan dette løses uden manuel afrunding (der ønskes at summen fortsat giver 11)??

På forhånd tak!
09. august 2007 - 16:33 #1
Hvordan ønsker du, afrundingen foretaget?
Det viste eksempel er jo fuldstændig korrekt i forhold til normal afrunding.

Ved at ændre formatet på cellerne, så de vises med 0 decimaler, vil cellerne beholde deres nuværende værdi, og summen vil derfor være 11.
Avatar billede be_nice Juniormester
09. august 2007 - 16:39 #2
Hej,

Ved flg. brug af ændring af visning af decimaler, kan du få Excel til at give dig et resultat hvor decimalerne også er talt med:

Afrunde et tal
Ændre antallet af viste decimalpladser uden at ændre tallet

"I et regneark
Marker de celler, du vil formatere.
Hvis du vil have vist flere eller færre cifre efter decimaltegnet, skal du klikke på Forøg decimal  eller Formindsk decimal  på værktøjslinjen (værktøjslinje: En linje med knapper og indstillinger, der kan bruges til at udføre kommandoer. Klik på Tilpas i menuen Funktioner, og klik derefter på fanen Værktøjslinjer.) Formatering."

Mvh.
Be_Nice
"Hver for sig kan vi alle en smule - men sammen kan vi det hele :o)"
Avatar billede wufs Nybegynder
09. august 2007 - 17:03 #3
Hej begge

Tak for svarene. De løser dog ikke problemet.

Problemet er, at jeg skal fordele værdien 11, så der samlet er fordelt 11, men de værdier de 11 fordeles på skal være uden decimaler. Hvis man ser på talrækken der er afrundet, fordeles der samlet kun 10. For at få fordelt 11 er det "mest fair", at det er den første værdi på 0,49 der rundes op til 0,50, hvorved der ved afrunding til nul decimaler bliver afrundet til 1. Samlet vil der dermed være fordelt 11.

Denne justering af afrundingen vil jeg dog gerne have foretaget "automatisk" via en funktion/metode i Excel istedet for manuel korrektion af værdierne.

Kan I hjælpe?
09. august 2007 - 17:08 #4
Hvad skal reglen så være, hvis der er 2 værdier på 0,49?
Avatar billede be_nice Juniormester
09. august 2007 - 17:13 #5
Hej igen,

Jeg forstår ikke helt din "opgave"!

Du kommer nok til at præcisere det hele lidt nærmere - har du en fast sum du skal fordele, hvilken fordelingsnøgle ønsker du at bruge - eller har du ikke noget fast system?

Giv en tilbagemelding og så skal jeg nok forsøge at guide dig til en løsning.

Mvh.
Be_Nice
"Hver for sig kan vi alle en smule - men sammen kan vi det hele :o)"
Avatar billede wufs Nybegynder
09. august 2007 - 17:20 #6
Hej Erik

Hmmm. det kan godt være dette spørgsmål skulle ha' været tildelt mere end 20 point :-)

Problemet er at jeg skal fordele 11 t.kr. ud fra ovennævnte andele. Jeg skal fordele de 11 t.kr. i hele tusinder, dvs. uden decimaler. De 11 t.kr. skal alle fordeles på den mest "fair" måde. Det mest "fair" er at runde den første værdi op til 1 (efter afrunding), men det efterspørger jeg en funktion der kan gøre automatisk.
Avatar billede be_nice Juniormester
10. august 2007 - 20:24 #7
Hej igen,

Først vil jeg sige at med hensyn til tildeling af point, så er det til enhver tid spørgerens ret at definere hvor mange point man ønsker at give for et svar - det bør dog ikke være nødvendigt at give mange point for at få løst sine problemer.

Med hensyn til din fordelingsnøgle, så er de fremkomne forslag om at afrunde nok det nærmeste du kommer et "perfekt" resultat - om det er "fair" at dele 11 t.kr. på den måde du foreslår, er der vel kun dig selv til at vurdere. Jeg ville nok foretrække en fordeling i nærmeste 500,- - men det kan der jo bruges megen tid på at diskutere.

Håber at du får løst "opgaven" på den bedste måde for dig.

Mvh.
Be_Nice
"Hver for sig kan vi alle en smule - men sammen kan vi det hele :o)"
Avatar billede mikker Nybegynder
16. august 2007 - 15:42 #8
Kan dette bruges?

Sorter efter faldende størrelse og start med at dele 1 ud til hver. Start så forfra med det højeste tal osv. indtil der ikke er flere?
Avatar billede wufs Nybegynder
16. august 2007 - 16:56 #9
Kommentar Be Nice

Jeg har fået løst opgaven ved manuel op- og nedrunding af en række lister tilsvarende den i eksemplet ovenfor. Det er dog en tilbagevendende opgave og det ville derfor være super med en funktion der automatisk kan løse opgaven til næste gang.

I mit konkrete tilfælde skal fordelingen iøvrigt være i hele tusinder.

Du skal dog have tak for bidragene :-)
Avatar billede wufs Nybegynder
16. august 2007 - 17:41 #10
Kommentar Mikker

Sådan som jeg forstår dit forslag, skal der stadig foretages en manuel vurdering af, hvilke(n) værdi(er) der er tættest på at skulle rundes op (eller ned) for at få fordelt de 11, så det hjælper mig ikke.

YDERLIGERE UDDYBNING:

I det nævnte eksempel skal de 11 fordeles på 8 andele med forskellig værdi. Det kunne dog lige så godt have været 1000, der skulle fordeles på 125 andele med forskellig værdi, hvilket jo gør opgaven noget mere uoverskuelig.

Min løsning har indtil videre været som følgende eksempel (jf. eksemplet med fordelingen af 11):

I cellerne A1:A8 står andelene.
I cellerne B1:B8 "trækker" jeg decimalerne fra andelene i kolonne A ud via =midt(A1;3;2).
Dernæst kopierer jeg resultatet i B1:B8 og vælger indsæt speciel - Værdier i kolonne C, hvorefter jeg sorterer dem stigende. Derved får jeg de værdier der er tættest på at skulle rundes op (lige under 0,50) eller ned (0,50 eller over) samlet ca. midt på listen, hvorefter den (eller de) værdier der er "nødvendige" at korrigere nemt kan identificeres og efterfølgende tilrettes.

I eksemplet med de 11 vil listen med de sorterede decimaler se således ud:

09
14
15
18
3
49
68
97
   
Da der i dette tilfælde mangler at blive fordelt 1 (afrundingen gav 10 jf. ovenfor) er det andelen med decimalerne 49 (0,49) der er tættest på at skulle rundes op, hvorfor denne tilrettes manuelt til eksempelvis 0,50. Derefter er de 11 fordelt.

Det er naturligvis hurtigt at foretage tilretningen manuelt i en lille liste, men ved store lister og mange lister kunne det være rart med en nemmere metode...
Avatar billede wufs Nybegynder
16. august 2007 - 18:01 #11
Kommentar Erik

Såfremt en af de andre værdier udover den eksisterende værdi på 0,49 erstattes med værdien 0,49 i det nævnte eksempel, således at der bliver 2 værdier på 0,49, vil de enten begge skulle justeres op såfremt der ved afrunding til nul decimaler bliver en sum på 9. Såfremt der bliver en sum på 10 vil de begge skulle justeres op, samt den værdi der er tættest på ikke at skulle rundes, men er det, vil skulle justeres ned, så summen ikke bliver 12, men 11.

I hvert fald ifølge min logik.

Mvh Wufs
Avatar billede be_nice Juniormester
16. august 2007 - 20:50 #12
Hej Wufs,

Tja, det er da noget af en opgave du ønsker udført der :o)

Umiddelbart bliver det svært at lave en automatisk regel, der også kan tage hensyn evt. gengangere af "uheldige" afrundinger, hvor der så skal besluttet om én eller flere skal rundes op/ned!

Måske skulle du overveje at lave en regel der "bare" afrunder som du ønsker, og derefter lave en kontroludregning, der fortæller om din værdi også stemmer overens med totalen på afrundingen af dine andele - ved afvigelser er du så desværre tvunget til at reagere. Med lidt gransken osv. så kunne du måske også lave en regel der så kører en ekstra gang på din nye fordeling? (Blot en tanke)

Håber at dette kan hjælpe dig lidt nærmere en løsning.

Mvh.
Be_Nice
"Hver for sig kan vi alle en smule - men sammen kan vi det hele :o)"
Avatar billede mikker Nybegynder
17. august 2007 - 08:54 #13
Vil der altid være minimum 1 til hver?
Skal alle have min 1?
Ønsker du en fordeling hvor nummer 1 får 400 og nummer 2 får 399 eller kan nummer 1 få 400 og nummer 2 kun få 2, nummer 3 få 1 osv ??
Avatar billede mikker Nybegynder
17. august 2007 - 10:15 #14
Den nemme:

Med antallet af tusinde i celle A1 og andelene i kolonne B.
Altså i A1 står der 11 i B1 0,49 B2 0,97 osv.

Private Sub CommandButton1_Click()
ren = ActiveSheet.Range("D30000").End(xlUp).Row
ActiveSheet.Range("D1:D" & ren) = 0
ant = ActiveSheet.Range("A1")
rg = ActiveSheet.Range("B30000").End(xlUp).Row
sat = 0: i = 0
ActiveSheet.Range("B1:B" & ren).Select
    Selection.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
ActiveSheet.Range("D1").Select
Do
i = i + 1
ActiveSheet.Range("D" & i) = ActiveSheet.Range("D" & i) + 1
sat = sat + 1
If i = rg Then i = 0
Loop While sat < ant
End Sub
Avatar billede wufs Nybegynder
17. august 2007 - 12:04 #15
Hej Mikker

Jeg har stort set ikke arbejdet med programmering, så dels kan jeg ikke gennemskue hvad programkoden vil gøre, og dels får jeg fejlmeddelelsen "runtime error 1004, application error or definition error", med henvisning til nedenstående del af koden 

    Selection.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

Jeg har indsat 11 i celle A1 og andele i cellerne B1:B8 og kører så programkoden via visual basic editor. Gør jeg noget forkert??

Fordelingen af andelene er tilfældig. Der kan sagtens forekomme en eller flere andele der ikke skal tildeles 1. Et eksempel kunne være at man har 11 en-kroner (mønter) og disse skal fordeles efter de 8 andele (andelene er fremkommet via pct.-andele der summer til 1, men giver de viste værdier når værdien 11 fordeles ud fra andelene). Alle 11 en-kroner skal fordeles, så hvordan skal fordelingen være!!??

Ifølge min logik skal fordelingen være følgende (som tidligere nævnt):

Fordeling uden justering:

    Andele    Fordeling
    0,49    0
    0,97    1
    2,15    2
    1,09    1
    1,14    1
    1,68    2
    1,3    1
    2,18    2
Sum    11    10

Fordeling inklusiv justering:

    Andele    Fordeling
    0,50    1  (justeret op)
    0,97    1
    2,15    2
    1,09    1
    1,14    1
    1,68    2
    1,3    1
    2,18    2
Sum    11    11

Håber det hjælper :-)
Avatar billede mikker Nybegynder
17. august 2007 - 12:42 #16
Prøv at flytte andelene til kolonne C og kør denne kode:

Private Sub CommandButton1_Click()
ren = ActiveSheet.Range("C30000").End(xlUp).Row
ActiveSheet.Range("D1:J" & ren) = 0
ant = ActiveSheet.Range("A1")
rg = ActiveSheet.Range("C30000").End(xlUp).Row
sat = 0: i = 0
ActiveSheet.Range("C1:C" & ren).Select
    Selection.Sort Key1:=Range("C1"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
ActiveSheet.Range("D1").Select
Do
i = i + 1
ActiveSheet.Range("E" & i) = ActiveSheet.Range("E" & i) + 1
sat = sat + 1
If i = rg Then i = 0
Loop While sat < ant
End Sub

Personligt mener jeg jo at det mest fair, så vidt muligt at fordele til andele over 0.
Avatar billede mikker Nybegynder
17. august 2007 - 12:46 #17
Ja...
Hvis du lige retter

ActiveSheet.Range("D1:J" & ren) = 0

til

ActiveSheet.Range("D1:J" & ren) = ""

Så ser det lidt pænere ud.

Og husk i øvrigt at lave et test ark så du ikke ødelægger originale data :o)
Avatar billede wufs Nybegynder
17. august 2007 - 13:14 #18
Ok tak, det prøver jeg. Har dog travlt så det bliver formentlig iaften...
Avatar billede be_nice Juniormester
01. september 2007 - 21:27 #19
Hej igen,

Er spørgsmålet løst - eller har du brug for mere hjælp?

Mvh.
Be_Nice
"Hver for sig kan vi alle en smule - men sammen kan vi det hele :o)"
Avatar billede be_nice Juniormester
25. september 2007 - 21:08 #20
Hej igen,

Har du fundet en løsning, og kan spørgsmålet lukkes?

Mvh.
Be_Nice
"Hver for sig kan vi alle en smule - men sammen kan vi det hele :o)"
Avatar billede wufs Nybegynder
03. oktober 2007 - 14:46 #21
Hej Be nice

Jeg beklager meget at jeg ikke har reageret før nu. Du skal have mange tak for hjælpen!!

Tilføj et svar, så tildeler jeg pointene til dig og lukker spørgsmålet.

Mvh Wufs
Avatar billede be_nice Juniormester
03. oktober 2007 - 23:11 #22
Tak for point

Be_Nice
Avatar billede mikker Nybegynder
04. oktober 2007 - 16:35 #23
Hvad blev løsningen?
Avatar billede be_nice Juniormester
08. oktober 2007 - 19:51 #24
Lukker du lige?

Be_Nice
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