Just nu i M3-nätverket
Jump to content

Jag får fellmeddelande "cirkelreferens" när jag vill att en cell ska öka med sig själv


JAF

Recommended Posts

Jag har ett problem i excel som bara ger mig felmeddelandet "cirkelreferens". Jag håller på med ett program som ska hålla koll på anställda på ett företag. När jag anställer en eller flera nya personer skriver jag i en cell "Anställt". Som exempel kan jag skriva då att jag anställt "1" person. Det jag vill ska hända då är att min cell jag kallar "Antal anställda" ska öka från den tidigare summan och lägga till det jag anget i cellen "Anställt". Som exempel står det då i cellen "Antal anställda" 10, vilket då innebär att jag har 10 anställda. Men om jag skriver in 1 i cellen "Anställt" vill jag ju att cellen "Antal anställda" uppdateras till 11. Likadant om jag exempelvis kanske anställer 3 personer under kortare uppdrag vill jag ju i cellen "Anställt" kunna skriva 3 vilket då genererar att cellen "Antal anställda" ska öka öka med 3 från det nuvarande värdet.

 

Säg att i cellen A1 skriver jag hur många jag anställer, och vidare är cellen A2 där det ska anges hur många anställda jag för närvarande har.

 

Anställt: (A1)

Antal anställda: (A2)

 

Jag vill ju då alltså ha en formel liknande att cellen A2 ökar med cellen A1, jag är ingen stjärna i excel, men jag provade att skriva liknande i cellen A2: =A2+A1 med detta fungerade inte och refererade till cirkelreferens, men jag tycker inte det borde vara så svårt, kanske med nån enkel formel eller nån funktion.

 

Tacksam för svar

 

 

/JAF

 

[bild raderad 4/6/2005 5:47:28 PM av JAF]

[bild bifogad 2005-04-06 17:48:29 av JAF]

698203_thumb.jpg

Link to comment
Share on other sites

Om jag inte minns helt fel så beror det på att du räknar på samma värde som du ska räkna fram, vart kommer A2 ifrån? är det bara ett inskrivet värde eller är det framräknat på något vis? i såna fall använd den ursprunliga uträkningen och plussa på A1 på den i A2, annars så får du nog räkna fram det till en ny cell tror jag.

 

/Marcus

 

Link to comment
Share on other sites

A2 är inget framräknat värde, det är bara där jag vill ha mitt svar om man säger så, men hela problemet jag har känns svårt att förklara.

 

Men är ju ungefär att jag vill ha en cell där jag skriver en ett tal, sen att jag har en annan cell som ökar med det talet.

 

Typ jag anger i en cell att jag anställt en ny person på mitt företag, då skriver jag alltså i 1 i den cellen. Sen vill jag ha en annan cell som då visar hur många anställda jag har. För närvarande har jag 10 anställda, men om jag skulle anställa en till skulle jag ju få 11. Så jag vill allstså vid nyanställning kunna skriva in hur många jag anställer i en cell, sen att cellen som visar hur många anställda jag har då ska öka med de antal jag skriver in i cellen där jag skriver att jag ansällt någon.

 

Typ jag har nu 10 anställda (säg att det står 10 i cellen A2). Sen skriver jag i en annan cell att jag anställer en ny person, jag skriver då en 1:a i den cellen (som exempel kan det då stå en 1:a i cellen A1). När jag fått en ny anställt vill jag ju att cellen A2 ska öka med 1, dvs det ska stå 11.

 

dvs, jag vill att cellen A2 ska öka med cellen A1...så formeln jag försökt med i cellen A2 är ju då: =A2+A1 vilket ger mig felmeddelande om cirkelreferens. Och jag tycker ju man borde kunna lösa detta enkelt. Inom programmering kan man ju tilldela olika värden och enkelt få ett värde att öka med ett nytt, men jag får inte ihop det i excel-fanskapet ;)

 

[inlägget ändrat 2005-04-06 16:28:04 av JAF]

Link to comment
Share on other sites

Jag vet inte om jag har förstått det hela rätt men om A2 har värdet 10 som du har skrivit in där så bör ju formeln se ut så här: =10+A1 även om en elegantare lösning skulle vara att göra en ny cell med totala anställda och lägga ihop A1 och A2 och sen om A2 aä statisk så kan du ju dölja den.

 

/Marcus

 

Link to comment
Share on other sites

nja, går ju inte riktigt att göra så med forlmen: =10+A1 eftersom det som står i A2 inte ska vara fast. om det står 10 i A2 och jag får en ny anställd och skriver 1 i A1 kommer ju det då blir 10+1...vilket stämmer eftersom jag då har 11 anställda. Men nästa gång jag anställer en person och återigen skriver in 1 i A1 kommer ju formeln åter bli 10+1 och ge 11, fast jag i själva verkat har 12 anställda.

 

Jo, jag förstår att det kan vara lite svårt att förstå vad jag menar med mitt problem, knappt så jag förstår det själv.

 

Men tänkt dig isället följande scenario:

 

Du jobbar i inträdet på en restaurang och där använder ni excell för att i slutet av kvällen se hur många som besökt stället. Varje gång det kommer besökare skriver du hur många det kom i en cell (vi tar cell A1 som exempel). Typ kommer det 1 person skriver du en 1:a i cellen A1, kommer det 5 personer skriver du en 5:a i cellen A1 osv. Du har alltså en cell där du hela tiden skriver hur många som kommer. Och varje gång du skriver in gäster i den cellen så blir ju summan för totalt antal besökare större. Du måste ju alltså ha en cell nånstans som summerar antalet besökare. Vi tar då cell A2 som exempel här. Cell A2 är här du visar summan för totalt antal besökare under kvällen. Vi utgår från att ni nyss öppnat erat ställe för dan och det inte kommit nån gäst än. Nu kommer det en gäst, och du skriver då 1 i cellen A1. Lite senare kommer det 5 gäster, du skriver du 5 i cellen A1. Din cell A2 måste ju du när första gästen kommit visa 1, eftersom ni då haft en gäst. När det senare kommer 5 gäster, måste ju cellen A2 visa 6, eftersom det då är sex gäster som besökt stället. Alltså måste formeln i A2 uppdateras. Är det 1 gäst först, och sedan kommer 5 gäster, så måste ju A2 göra nått som ger 1+5, vilket är den totala summan för antal gäster. Men detta går inte eftersom man inte kan uppdatera en cell med sig själv i excel.

 

:) hoppas mitt lama exempel med restaurangen ger lite bättre förklaring om vad jag menar, har dålig fantasi och kom inte på nåt bättre :)

 

 

 

 

Link to comment
Share on other sites

Jag förstår hur du menar nu men hur man ska göra det i excel vet jag inte, men gissningsvis så kommer snart någon mer excelkunnig än mig att se det här :)

 

/Marcus

 

Link to comment
Share on other sites

Du måste gå in i Tools/Options, Calculation och markera Iterations. Sätt Maximum iterations till 1.

Då kan di ha en formel i cell A2 som är A1+A2 och inga cirkelreferns fel anges.

 

BI

 

Link to comment
Share on other sites

Hmmm, ellegant, eller...väldigt fult, typ...

 

Finns det några nackelar? förutom att "vad händer om" och ekvationslösningar går åt skogen? Annars är det ju en ganska smidig lösning.

 

Link to comment
Share on other sites

Det funkade att göra så BI, men nu uppstår ett annat problem :) De andra celler som jag har information i fungerar alldeles utmärk, men när jag trycker enter påverkas mina antal anställda, den ökar med det den gjorde senast. Om jag exempelvis på samma kalkylblad vill fylla i säg hur många som är sjukskriva och som exempel skriver 2 i en cell, när jag då trycker enter här så av nån anledning så uppdateras även mina antal anställda utan att jag vill det :)

 

 

/JAF

 

Link to comment
Share on other sites

Japp, detta (kan) bero på att summa är en volatile, en flyktig formel . Dessa formler räknas om så fort något på arket ändras. Fast vänta, nej, summa är väl inte flyktig?

 

trodde den bara uppdaterade om området den beror på ändrades...

 

Nåja, det verkar som om formeln trots är flyktig och då är det inte mycket att göra åt det, då fungerar det inte att lösa det via formler på arbetsbladet. Det är möjligt att det är cirkelreferensen som får summeringen att exekvera varje gång det sker en ändring på bladet.

 

kan du inte beräkna detta värde från något annat ställe i boken? En lista över anställda eller så?

 

Annars får vi tyvärr använda Excel händelsefunktioner. Inte så svårt, men om man kan ska man undvika dessa.

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] Worksheet_Change(ByVal Target As Range)
    [color="#0000ff"]If[/color] (Target.Cells.Count = 1 [color="#0000ff"]And[/color] Target.Address = Cells(1, 1).Address) [color="#0000ff"]Then[/color]
        Cells(1, 2).Value = Cells(1, 2).Value + Target.Value
    [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]


[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

OBS OBS

Om du nyttjar denna kod, se till att du i andra rutiner som skriver till arbetsbladet inkluderar följande rad:

[b]Application[/b].EnableEvents = [color="#0000ff"]False[/color] /[color="#0000ff"]True[/color]

Annars exekveras funktionen vid varje skrivning till bladet vilket kan ta en massa tid.

 

Ja, öppna VBA och klistra in koden på motsvarande blad i arbetsboken.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2005-04-07 14:39:20 av Monshi]

Link to comment
Share on other sites

Eller, om du vill använda makron, men tycker att händelser är otäcka (det är dom...). Gör det riktigt, riktigt enkelt och manuellt.

 

Skapa en fomulärs-knapp (visa-verktygsfält-formulär, dra en knapp till ditt blad)

nu ör det komma upp en dialogruta med "koppla makro till objekt"

välj "nytt"

Nu borde du komma in i en kodruta som visar en sub som heter någonting i stil med "Sub Knapp1_Klicka()". Skriv in lite kod så att det står någonting i stil med

 

[color="#0000ff"]Sub[/color] Knapp1_Klicka()
Range([GRÅ]"A2"[/GRÅ]).Value = [color="#0000ff"]Cint[/color](Range([GRÅ]"A1"[/GRÅ]).Value) + [color="#0000ff"]Cint[/color](Range([GRÅ]"A2"[/GRÅ]).Value)
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

stäng kodrutan

Redigera sedan texten och skriv något vettigt (typ "uppdatera antal anställda"). Om du inte kan redigera får du Högerklicka på din knapp och välja "redigera text".

klicka utanför för att avsluta textredigering

 

Nu borde du få järnkoll. Man skriver in nyanställda i A1, dubbelkollar att det är rätt och trycker på knappen.

/Magnus

 

PS

istället för

Range("A2").Value = CInt(Range("A1").Value) + CInt(Range("A2").Value)

så kan du skriva som Monshi gör, dvs

Cells(2,1).Value = Cells(1, 1).Value + Cells(2, 1).Value

Det är mest en smaksak

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...