webForumDet fria alternativet

löses på annat sätt i excel?

9 svar · 1 400 visningar · startad av pelk

pelkMedlem sedan juli 2006132 inlägg
#1

Hej,
håller på med ett flödesschema för jobbets räkning.
För att få fram schemat på flik b, har jag gjort som i flika a.
Närsom helst kan det hända att besöksdatumen (dvs dag 1, 4 osv på flik b)blir senare lagda, beroende på patienternas tillstånd.

Vad tycker mi om min lösning? Går det att förenkla, hur isåfall?
Jag skulle även villja att:

  1. kontrollera om datumet är helgdag?
  2. om helgdag gå till nästa vardag

fråga: hur gör jag detta ?

MindreVetandeMedlem sedan okt. 2005371 inlägg
#2

Hmm, lite för omfattande för att tränga in i ordentligt, men:

Blad B cell E3 pekar på Blad A cell C11, antar att det skall vara C12 som i de andra cyklerna?

Är bladB till patient och bladA "internt"? Eller går det att lägga ihop dem?

Nåja, till dina frågor.
Ett gammalt hederligt OM-villkor Med lite hjälp av VECKODAG
=VECKODAG(B3;2) kommer att returnera numret på veckodagen (måndag=1 till söndag =7) Om du lägger till önskat antal dagar, t.ex 3 så ges numret för den dagen istället
=VECKODAG(B3+3;2)
Nu kan du göra en ganska krånglig OM-formel.
A. Om veckodagen <6 så returneras datumet som vanligt
B. Om Om veckodagen >=6 så returneras datumet + (8-veckodagen)

=OM(VECKODAG(B3+3;2)<6;(B3+3);(B3+3)+(8-VECKODAG(B3+3;2)))
Lite lagom krångligt :-)

Alternativt skulle du kunna använda de "arbetsdagsfunktioner" som finns i analysis toolpack (verktyg, tillägg, se till att analysis toolpack är ifyllt). De tillåter även att du skapar en lista med helgdagar (utöver lördag, söndag).
Dvs du skulle kunna göra en formel i stil med
=ARBETSDAGAR(B3;3).

Problemet är att den alltid lägger till 3 arbetsdagar, och det är ju inte det du vill. Hmmmm, hur tusan gör man för att få in helgdagar i en enkel ekvation...

Ahhh, självklart. Plussa på en dag för lite och be excel hitta nästa arbetsdag :stud
=ARBETSDAGAR(B3+2;1)
Eller, mer användbart:
=ARBETSDAGAR(B3+2;1;adressen till dina extra helgdagar)
På blad B så kan du ju nöjja dig med att länka det första datumet i varje cykel och sedan lägga till rätt antal dagar i schemat.
Förslag: Ändra datumformatet för datumcellerna i schemat (Format->celler->anpassat) till någonting i stil med
DDD ÅÅÅÅ-MM-DD
Jag är i alla fall den typen av människa som har mycket lättare att komma ihåg datum om veckodagen är med.

pelkMedlem sedan juli 2006132 inlägg
#3

tack för ditt svar :)

MindreVetande skrev:

Blad B cell E3 pekar på Blad A cell C11, antar att det skall vara C12 som i de andra cyklerna?

Är bladB till patient och bladA "internt"? Eller går det att lägga ihop dem?

Naturligtvis skall det peka på C12 :r
Blad B är mycket riktig tänkt till patienten, som ett besöksschema, medans blad a är mitt enkla och stenåldersmässiga sätt att få fram rätt datum.

MindreVetande skrev:

På blad B så kan du ju nöjja dig med att länka det första datumet i varje cykel och sedan lägga till rätt antal dagar i schemat.

funkar inte riktigt eftersom man kan behöva manuellt ändra behandlingsdag (vid varje behandlingsstillfälle så skall patienten uppfylla vissa villkor)

Kan nedanstående lösning göras:
för dag 8, cykel 1 (dvs cell D3 på blad b)
om

  1. D3 = 1/1 -> skriv ut 2/1 på blad b*
  2. om 2/1 är en lördag eller söndag -> skriv ut måndagens datumpå blad b*
  3. om D3 = 6/6 -> skriv ut 7/6 på blad b*
  4. om 7/6 är en lördag eller söndag -> skriv ut måndagens datum på blad b*
  5. om D3 = 24/14 -> skriv ut 27/12 på blad b*
  6. om 2/1 är en lördag eller söndag -> skriv ut måndagens datum på blad b*

*men behåll det faktiska datumet på blad a, så att vi kan addera +1dag i fortsättningen med

MindreVetandeMedlem sedan okt. 2005371 inlägg
#4

Om värden vore en snäll och enkel plats så skulle det vara en baggis, men du har lite manuellt arbete framför dig :-)
1. Gör en tabell med helgdagar. T.ex ett nytt blad som heter tje, helgdagar :-). Där skriver du in en tabell med årets helgdagar (+ nästa år om det behövs). Det är själva datumen som är viktiga, texten står bara där för att jag behöver ha koll. I det här exemplet blir adressen Helgdagar!$A$1:$A$12 (dollartecknen är bara ett sätt att "låsa" adressen så att det blir lättare att kopiera formler)

2006-01-01	nyårsdagen 
2006-01-06	trettondagen 
2006-04-14	långfredag 
2006-04-17	annandag påsk 
2006-05-01	första maj 
2006-05-25	Kristi himmelfärdsdag 
2006-06-06	Sveriges nationaldag 
2006-06-24	midsommardagen 
2006-11-03	alla helgons dag 
2006-12-24	Julafton*
2006-12-25	juldagen 
2006-12-26	annandag jul

Källor:
http://sv.wikipedia.org/wiki/Helgdag
http://www.helgdagar.com/holidays_2006_165.htm
(källa 2 verkar göra något hyss med javaskript och kopiering, förmodligen är det enklare att använda en fickkalender)

När det är klart så får du helt enkelt ändra ALLA dina länkar på blad-B
=a!C2 blir =ARBETSDAGAR(a!C2-1;1;Helgdagar!$A$1:$A$12)
=a!C5 blir =ARBETSDAGAR(a!C5-1;1;Helgdagar!$A$1:$A$12)
=a!C9 blir =ARBETSDAGAR(a!C9-1;1;Helgdagar!$A$1:$A$12)
=a!C12 blir =ARBETSDAGAR(a!C12-1;1;Helgdagar!$A$1:$A$12)
osv

Du kan fuska lite grand. Om du skriver in ett extra $-tecken
=ARBETSDAGAR(a!C$2-1;1;Helgdagar!$A$1:$A$12)
Då räcker det med att du fixar några rader (cykel1, 5 och 9), sen kan du kopiera ner de raderna och köra "sök och ersätt", typ
Sök a!C ersätt med a!F osv
Eller, fuska ännu mer. Kopiera det jag smällde in i kopian av din bok. Jag hoppas att det blev rätt, men dubbel- och trippelkolla för tusan, det var ett "snabbt och smutsigt" jobb

pelkMedlem sedan juli 2006132 inlägg
#5

tack för ditt svar :bire

MindreVetande skrev:

När det är klart så får du helt enkelt ändra ALLA dina länkar på blad-B
=a!C2 blir =ARBETSDAGAR(a!C2-1;1;Helgdagar!$A$1:$A$12)
=a!C5 blir =ARBETSDAGAR(a!C5-1;1;Helgdagar!$A$1:$A$12)
=a!C9 blir =ARBETSDAGAR(a!C9-1;1;Helgdagar!$A$1:$A$12)
=a!C12 blir =ARBETSDAGAR(a!C12-1;1;Helgdagar!$A$1:$A$12)
osv

kan du förklara ovanstående koden - så att jag förstår konstruktionen och lär mig liite :stud

MindreVetandeMedlem sedan okt. 2005371 inlägg
#6

ARBETSDAGAR är egentligen en funktion för att räkna fram ett datum som ligger XXX-arbetsdagar fram i tiden från datumet YYY. Syntaxen är

=ARBETSDAGAR(YYY;XXX;helgdagar)
YYY= startdatum
XXX= antal ARBETSdagar vi vill gå fram i tiden
helgdagar= adressen till en lista med Lediga dagar (utöver lör/sön)

Nu kör vi ett knep. Vi vill ju egentligen inte gå fram i tiden (om det inte är en helgdag). Men om vi tar: (YYY-1) så hamnar vi på dagen innan den vi är intresserad av, sedan ber vi den hitta nästa ARBETSdag (xxx=1).

=ARBETSDAGAR(YYY-1;1;helgdagar)

Då kommer datumen att bete sig precis som du vill.

Om YYY är en vanlig arbetsdag så är första arbetsdagen efter "igår" (YYY-1) "samma dag". Om YYY är en Helgdag så är ju första arbetsdagen efter "igår" (YYY-1) nästa helgfria arbetsdag.
WOW, den förklaringen får nog komma med på min personliga 10-top lista över opedagogiska beskrivningar :-)
En liten lista istället, det kanske är begripligare...

YYY	(YYY-1)	Nästa arbetsdag
må	sö	må
ti	må	ti
on	ti	on
to	on	to
fr	to	fr
lö	fr	må
sö	lö	må
må	sö	må

Det sista argumentet i formeln ARBETSDAGAR är:
helgdagar. Det är en lista någonstans med helgdagar utöver lördag/söndag (det är ju olika i varje land, företag har olika regler osv, antar att det är därför man måste skriva listan själv)

I mitt exempel så har jag infogat ett nytt kalkylblad "helgdagar" där jag skrivit upp datumen för helger under 2006. Adressen till listan är
Helgdagar!$A$1:$A$12

Om vi tar ditt exempel med "dag 8, cykel 1" (cell D3 på blad b) så hämtar du datumet du vill undersöka på blad "a", dvs "=a!C9"

YYY är a!C9
Men för att vårt trick skall fungera så tar vi
YYY-1 är (a!C9-1)
XXX är 1, dvs antalet ARBETSdagar vi vill gå fram i tiden (egentligen 0-dagar, men eftersom vi kör knepet så...)

Efter mycket om och men så kommer vi fram till att du vill ändra din begripliga, enkla och fina formel
=a!C9
till den krångliga och fula x(
=ARBETSDAGAR((a!C9-1);1;Helgdagar!$A$1:$A$12)
Puhhhh

pelkMedlem sedan juli 2006132 inlägg
#7

tack för ditt svar,
men det stämmer väl inte riktigt:
Ta bara för i år: 6/6 var en tisdag och helg. Så nästa arbetsdag är en onsdag, 7/6
Men i din tabell

YYY	(YYY-1)	Nästa arbetsdag
må	sö	må
ti	må	ti
on	ti	on
to	on	to
fr	to	fr
lö	fr	må
sö	lö	må
må	sö	må

aå är det fortfarande en tisdag??

MindreVetandeMedlem sedan okt. 2005371 inlägg
#8

Hej.
Tabellen var ju bara ett extremt förenklat exempel för en "normalvecka".
Om du har gjort i ordning en lista med helgdagar så kommer ARBETSDAGAR att behandla datumen i helg-listan precis som kördag/söndag.
Om du hade matat in 2006-06-06 så hade den känt av att det datumet finns i listan och hoppat till nästa arbetsdag.

Skapa en ny arbetsbok och testa.
1. Gör iordning ett blad med helgdatum (Helgdagar)
Lägg datumen i kolumn: a
Se till att nationaldagen är med

Skriv in följande formel någonstans
=ARBETSDAGAR(DATUM(2006;6;6)-1;1;Helgdagar!$A$1:$A$12)

Då kommer den att returnera 2006-06-07 (om den visar 38875 så får du ändra formatet till datum --- format, celler, talformat, datum )
Om du istället skriver
=ARBETSDAGAR(DATUM(2006;6;5)-1;1;Helgdagar!$A$1:$A$12)
så returneras måndagen osv
Testa och se om det är den beter sig som du vill!

PS: om du vill göra ditt blad lite mer framtidssäkert så kan du skap ett namngivet område med helgdagar.
Gå till menyn Infoga-namn-definiera
Skriv Helger i "definierade namn"
I "Refererar till" markerar du det område som innehåller din lista med helgdagar. Ok
Nu kan du skriva din formel lite enklare:
=ARBETSDAGAR(DATUM(2006;12;25)-1;1;Helger)
Men den stora fördelen är om du lägger till fler helgdagar (t.ex 2007 och 2008). Då behöver du bara ändra det namngivna området istället för att gå igenom alla formler.

Det finns faktiskt fördelar när man blir tvungen att lägga in datum i en lista. Det går att lägga till dagar som inte är helgdagar men olämpliga ändå. T.ex om kliniken har personalmöte i monaco och det är svårt att hinna hem till dagen efter (nehej, det kanske inte händer så ofta...)

pelkMedlem sedan juli 2006132 inlägg
#9

nu kanske jag är lite jobbig, men för att jag skulle lära mig och/eller förstå. Kunde du "dissikera" följande 2 formler :stud
1)

MindreVetande skrev:

=ARBETSDAGAR(DATUM(2006;6;6)-1;1;Helgdagar!$A$1:$A$12)

MindreVetande skrev:

=ARBETSDAGAR(DATUM(2006;6;5)-1;1;Helgdagar!$A$1:$A$12)

MindreVetande skrev:

=ARBETSDAGAR(DATUM(2006;12;25)-1;1;Helger)

MindreVetandeMedlem sedan okt. 2005371 inlägg
#10

*********1 *******
DATUM(2006;6;5) är bara ett sätt att få excel att förstå att det är ett datum
DATUM(år;månad;dag). Det översätts då till excels interna datumformat (antal dagar sedan 1900-01-01). Dvs DATUM(2006;6;5) är "egentligen" 38873.

Jag använder det bara för att du skall kunna skriva in vilket datum som helst och kolla hur det beter sig.

Så formeln
=ARBETSDAGAR(DATUM(2006;6;6)-1;1;Helgdagar!$A$1:$A$12)
Betyder
A). DATUM(2006;6;6) = Se till att excel förstår att är ett datum, 2006-06-06 (nationaldagen)
B). DATUM(2006;6;6)-1 Minska värdet på datumet med 1 dag (oavsett helger osv), Dvs omvandla det till 2006-06-05 (måndagen innan nationaldagen).
C). ;1; betyder att Excel skall leta efter nästa arbetsdag som kommer efter 2006-06-05.
D). ;Helgdagar!$A$1:$A$12) är den lista som vi gjorde iordning med helgdagar under 2006 (förutom vanliga lördagar/söndagar). Det är där excel skall leta för att veta vilka dagar som skall är Icke-arbetsdagar

Sammantaget utförs allts beräkningen
(2006-06-06)-1=2006-06-05 (dvs det datum som ARBETSDAG "ser")
ARBETSDAG tittar i listan efter helger+lördag/söndag och räknar ut att (2006-06-05 + en arbetsdag) blir = 2006-06-07 eftersom 2006-06-06 står med i helglistan

*********2 och 3*******
Är precis samma sak som ovanstående men med startdatum 2006-06-05. Jag ville bara visa hur du kunde testa "principen" för formeln genom att ändra
DATUM(2006;6;6) till DATUM(2006;6;5), Dvs 2006-06-06 till 2006-06-05
som du ser så kommer 2006-06-05 att returnera 2006-06-05 medan 2006-06-06 returnerar 2006-06-07
och det var ju det du ville
3:an är samma sak igen men med ett annat ingångsdatum och ett namngivet område

134 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)