Just nu i M3-nätverket
Jump to content

Arbetsdagar i Excel


MDF

Recommended Posts

Hej!

Är det någon som vet om man kan få excel att räkna ut kommande arbetsdagar (dvs dagar exkl. helger och röda dagar)?

 

Ex - jag vill sätta ett datum och sedan ska excel ta detta datum plus (ex 25 arbetsdagar) så att resultatet (det nya datumet) ej kan hamna en helg/röd dag.

 

 

Tacksam för svar!

 

Micke

 

Link to comment
Share on other sites

Det finns en funktion NETTOARBETSDAGAR i tilläggspaket Analysis toolpack.

 

 

Se även XLDennis sidor, tror att han har ett exempel om detta där:

http://www.xldennis.com

 

 

/T

 

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

 

Link to comment
Share on other sites

Här är ett litet förslag på en kod i VBA som Du kan testa

Du har inte anget i din fråga om även Lördag och Söndag skall

räknas som arbetsdagar, I förslaget räknas arbetsdagarna från

Måndag t.o.m. Fredag, men kan lätt justeras att omfatta övriga dagar

också. Då många helgdagarna infaller olika år från år, är det lättast

att skriva in dessa i särskild kolumn ( det går att koda en uträkning av

detta, men är en aning komplicerad, formlen finns på nätet).

 

Kopiera in koden i ett tomt ark och testkör

 

Skriv startdatum i kolumn G, rad 2

Skriv stoppdatum i kolumn H, rad 2

Ange helgdatum i kolumn J, fr.o.m. rad 2

Sub vardagar()
Dim dagNmn(1 To 5)
Dim dagnr
Dim antDag
Dim nr
Dim vaVarde
Dim rnVarde
Dim radNr
dagNmn(1) = "Mån"
dagNmn(2) = "Tis"
dagNmn(3) = "Ons"
dagNmn(4) = "Tor"
dagNmn(5) = "Fre"
nr = 2
antDag = ActiveSheet.Cells(2, 8) - ActiveSheet.Cells(2, 7) ' Antal dagar som skall räknas fram
Set helgOmr = ActiveSheet.Range(Range("J2"), Range("J5"))  ' Området av helgdagar som skal genomsökas
' Slingan som skriver ut datum och dagnummer
For radNr = 0 To antDag
dagnr = DatePart("w", ActiveSheet.Cells(2, 7) + radNr, vbMonday) 'Anger dagnumret i aktuell vecka med Måndag som 1
vaVarde = ActiveSheet.Cells(2, 7) + radNr ' Anger sökdatum
With helgOmr
  Set rnVarde = .Find(What:=vaVarde)
If dagnr < 6 And rnVarde Is Nothing Then
 ActiveSheet.Cells(nr, 1) = ActiveSheet.Cells(2, 7) + radNr  'Skriver ut datum i aktuell cell
 ActiveSheet.Cells(nr, 2) = WeekdayName(dagnr, False, vbMonday)  'Skriver ut dagens namn i aktuell cell
 nr = nr + 1 'Radnummer som skall skrivas till
End If
End With
Next radNr
End Sub

Lycka till

 

/Lade till KOD-taggar/

/Monshi - Moderator/

 

[inlägget ändrat 2004-10-10 13:38:16 av Monshi]

Link to comment
Share on other sites

...men om det finns en i Excel inbyggd funktion är denna bättre...

 

Nu har vi dock fastställt i en tidigare tråd att Excels notering av vissa helgdagar inte stämmer riktigt.

 

Läser frågan igen och ser att funktionen som efterfrågas snarare är ARBETSDAGAR, även denna i Analysis Toolpack.

 

Och Jaleb - kan det inte vara bättre att skriva om det som en funktion med tre indata värden:

* Datum

* Antal dagar

* Område med helgdagar.

 

Denna funktion kan man sedan använda i Excel som en vanlig funktion. Inget jag ids göra just nu... får se först vad frågeställaren säger.

 

 

EDIT

Går ifrån datorn ett tag och hjärnan går på tomgång. Då inser jag att det är exkat så som ARBETSDAGAR fungerar, beskrivningen passar perfekt på den funktionen...

 

 

/T

 

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

 

 

[inlägget ändrat 2004-10-10 14:15:38 av Monshi]

Link to comment
Share on other sites

Hej

TACK - har du tillverkat excel eller...?

 

Är följande en bugg i Excel?

 

Cell A1: 2005-02-01

Cell A2 =veckonr(A1) vilket resulterar i 6

 

Detta är fel - veckonumret 1 februari 2005 är 5. Samma sak händer med 2005-02-21, dvs den visar en vecka fel.

 

Vad göra?? Är på mållinjen nu....

 

 

Tack

 

Micke

 

Link to comment
Share on other sites

=VECKONR(A1;2)

 

när måndag är veckodag 1

 

Läs den inbyggda hjälpfunktionen i Excel! Skriv VECKONR och läs om bl.a. de olika returtyper som gäller för aktuell funktion!

 

 

[inlägget ändrat 2004-10-10 18:35:32 av [cg]]

Link to comment
Share on other sites

Är följande en bugg i Excel?

Utan att veta, ja, det är det nog.

 

Se denna tråd:

//eforum.idg.se/viewmsg.asp?EntriesId=612567

där liknande fall diskuteras.

och denna:

//eforum.idg.se/viewmsg.asp?EntriesId=612031

 

Visar inte Exccel fel veckonummer redan vid nyår? Det är där felet uppstår och fortplantar sig.

Datum Resultat av veckonr

2004-12-30 53

2004-12-31 53

2005-01-01 1

2005-01-02 2

2005-01-03 2

 

orkar inte kontrollera det nu, men du ska nog se att PerboMan kommer med ett intelligent inlägg om han ser din fråga.

 

du kan även se vad XLDennis skriver:

http://www.xldennis.com/veckonummer%28vba%29.htm

 

(om han har rätt får du kontrollera själv, men skulle tro det. han KAN Excel. Jag bara nosar på godsakerna)

 

/T

 

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

 

Link to comment
Share on other sites

Hej!

 

Jag är smickrad...

 

XLDennis skriver precis som det är på sin sida. VECKONR (WEEKNUM) är anpassad efter amerikanska förhållanden. Den enda chansen att få rätt veckonummer efter den svenska standarden är att använda den egendefinierade funktion som kenobe skapade och jag bugrensade i: //eforum.idg.se/viewmsg.asp?EntriesId=612031

Vad det gäller den ursprungliga frågan så är det underligt att det inte finns bättre stöd i excel för kalendrar. Alla röda dagar är väldefinierade, den enda helg som kräver riktiga specialfunktioner är påsken, men de formlerna har varit kända sedan långt mer än hundra år och är lätta att implementera (KHF och pingst är givna när man fått fram påsk).

[log]Function Påskdagsdatum(Årtal As Integer, Optional Returtyp As Integer) As Variant

Dim A As Integer, B As Integer, C As Integer, D As Integer

Dim E As Integer, F As Integer, G As Integer, H As Integer

Dim I As Integer, K As Integer, L As Integer, M As Integer

Dim P As Integer, Q As Integer, intDatum As Integer, strMånad As String

 

A = Årtal Mod 19

B = Int(Årtal / 100)

C = Årtal Mod 100

D = Int(B / 4)

E = B Mod 4

F = Int(B + 8) / 25

G = Int((B - F + 1) / 3)

H = ((19 * A + B - D - G + 15) Mod 30)

I = Int(C / 4)

K = C Mod 4

L = ((32 + 2 * E + 2 * I - H - K) Mod 7)

M = Int((A + 11 * H + 22 * L) / 451)

P = Int((H + L - 7 * M + 114) / 31)

Q = ((H + L - 7 * M + 114) Mod 31)

If P = 3 Then strMånad = "Mars"

If P = 4 Then strMånad = "April"

intDatum = Q + 1

If Returtyp = 2 Then

Påskdagsdatum = Årtal & " " & strMånad & " " & intDatum

Else

Påskdagsdatum = DateValue(Årtal & "-" & "0" & P & "-" & intDatum)

End If

 

End Function

[/log]

 

Vänligen

 

Pär B

 

Link to comment
Share on other sites

Hej igen:)

 

Kunde inte släppa taget.

 

Testade att göra ett kalkylblad där jag i A1 angav ett år.

 

I A3 till A14 listade jag sedan de dagar som vi räknar som lediga dagar i Sverige, och som ligger eller kan ligga på annant än lördag/söndag (nyårsdan, trettondan, långfredag, annandag påsk, första maj, KHF, annandag pingst, midsommarafton, julafton, juldagen, annandag jul och nyårsafton).

[log]Långfredag =

påskdagsdatum($A$1)-2

Annandag Påsk =

påskdagsdatum($A$1)+1

KHF =

påskdagsdatum($A$1)+39

Annandag Pingst =

påskdagsdatum($A$1)+50

Där påskdagsdatum är den egendefinierade funktion som jag listade i förra inlägget.

Midsommarafton =

OM(VECKODAG(DATUMVÄRDE(A1&"-06-19");2)>5;DATUMVÄRDE(A1&"-06-19")+12-VECKODAG(DATUMVÄRDE(A1&"-06-19");2);DATUMVÄRDE(A1&"-06-19")+5-VECKODAG(DATUMVÄRDE(A1&"-06-19");2))

Övriga dagar =

=DATUMVÄRDE($A$1&"-01-01")

[/log] Där man ersätter värdet inom citationstecknen med rätt datum.

Sedan är det inga problem att låta NETTOARBETSDAGAR som tredje argument ha A3:A14. Funktionen räknar inte de helgdagar som hamnar på lördag/söndag dubbelt.

 

/Pär B

 

[inlägget ändrat 2004-10-11 10:13:19 av PerboMan]

 

/Inlägget redigerat av Moderator

Lade till LOG-taggar för att hålla nede bredden på inlägget

Monshi - Moderator för Officeprogram/

 

[inlägget ändrat 2004-10-11 10:37:02 av Monshi]

Link to comment
Share on other sites

  • 1 year later...

hej,

har två frågor

1) hur får jag in formeln i cell A3 på blad helgdagar

2) hur får jag påskdagen listad för 3 år framåt?

 

tackar på förhand

//Peter

 

Link to comment
Share on other sites

Ojojoj! Ibland ploppar riktigt gamla trådar upp igen...

Men samtidigt är det ju bra att du gett dig tid att söka istället för att bara starta en ny tråd.

 

Vad det gäller din första fråga så är det så att du först måste skapa den egendefinierade funktion som jag listar två inlägg upp. Om du inte gjort det förr, så är den enkla förklaringen:

1. Tryck Alt+F11

2. Välj Infoga - Modul

3. Kopiera och klistra in koden från mitt inlägg 2004-10-11 07:53

Sedan kan du var som helst i ditt kalkylblad skriva =Påskdagsdatum(<Årtal>) och få ut vilket datum påskdagen infaller på detta år.

 

Som svar på din andra fråga (om jag tolkar den rätt):

=Påskdagsdatum(ÅR(IDAG())+3).

 

/Pär B

 

Link to comment
Share on other sites

Tack Pär för ditt svar:thumbsup:

Ponera att jag har ett datum i cell E13 blad A

Nu vill jag lista i

1) D1 blad helg - påskdagen som infaller för året i E13 blad A

2) D2 blad helg - påskdagen som infaller för året efter E13 blad A

3) D3 blad helg - påskdagen som infaller för 2 år efter E13 blad A

 

Tack i förhand för all hjälp

//Peter

 

 

 

 

Link to comment
Share on other sites

Tämligen enkelt, förutsatt att du verkligen har ett datum i E13.

Ersätt IDAG() med E13 och du får i D1-D3:

=Påskdagsdatum(ÅR(E13))

=Påskdagsdatum(ÅR(E13)+1)

=Påskdagsdatum(ÅR(E13)+2)

 

/Pär B

 

Link to comment
Share on other sites

Archived

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



×
×
  • Create New...