Avatar billede mihl Nybegynder
19. juli 2008 - 23:12 Der er 10 kommentarer og
1 løsning

Antal Hverdage

Jeg har brug for at vide hvor mange hverdage der er imellem to datoer...

Eks. mellem 05-11-2008 og 03-12-2008

Og kun hverdage... Man skal kunne tage højde for helligdage... Nogen ideer?
Avatar billede ebea Ekspert
20. juli 2008 - 00:01 #1
I Excel ser formlen sådan ud.    =ANTAL.ARBEJDSDAGE(A1;B1)
Avatar billede cool_m_f Nybegynder
20. juli 2008 - 00:28 #2
nope, den virker ikke i excel, den tager ikke højde for helligdage

for at kunne det (både i vb og i excel) skal du have en liste med helligdage som ikke skal medregnes
Avatar billede ebea Ekspert
20. juli 2008 - 00:36 #3
cool_m_f  -  Så må der være noget i vejen med din formel. Hvis du f.eks. indtaster idag (20-07-2008 i celle A1) og (30-07-2008 i celle A2) så får du resultatet 8 i A3. Og det er mig bekendt antallet af arbejdsdage, regnet med 5 arbejdsdage om ugen. Så hvordan du kan få andet, ved jeg ikke.
Avatar billede cool_m_f Nybegynder
20. juli 2008 - 00:44 #4
@ ebea:
og hvis du taster 22-12-2008 i A1  og 31-12-2008 i B1 får du også 8 dage, men du holder måske ikke jul??????

som sagt, den tager ikke højde for helligdage
Avatar billede ebea Ekspert
20. juli 2008 - 01:10 #5
Sorry! Nej jeg har ikke tid til at holde Jul. Jeg glemte helligdage. I så tilfælde skulle formlen hedde:    =ANTAL.ARBEJDSDAGE(A1;B1;C1:D1) hvor du har helligdage i C1 og D1.
Avatar billede cool_m_f Nybegynder
20. juli 2008 - 01:49 #6
og hvordan får du lavet en formel i excel om til vb?
Avatar billede ebea Ekspert
20. juli 2008 - 01:50 #7
Jeg er ikke selv befaren ud i Visual Basic, men har fundet en kodestump, som skulle kunne lave tricket i VB.

Public Function WorkingDays2(StartDate As Date, EndDate As Date) As Integer
'....................................................................
' Name:     WorkingDays2
' Inputs:     StartDate As Date
'     EndDate As Date
' Returns: Integer
' Comment: Accepts two dates and returns the number of weekdays between them
' Note that this function has been modified to account for holidays. It requires a table
' named tblHolidays with a field named HolidayDate.
'....................................................................
On Error GoTo Err_WorkingDays2

Dim intCount As Integer
Dim rst As DAO.Recordset
Dim DB As DAO.Database

Set DB = CurrentDb
Set rst = DB.OpenRecordset("SELECT [HolidayDate] FROM tblHolidays", dbOpenSnapshot)

'StartDate = StartDate + 1
'To count StartDate as the 1st day comment out the line above

intCount = 0

Do While StartDate <= EndDate

rst.FindFirst "[HolidayDate] = #" & StartDate & "#"
If Weekday(StartDate) <> vbSunday And Weekday(StartDate) <> vbSaturday Then
If rst.NoMatch Then intCount = intCount + 1
End If

StartDate = StartDate + 1

Loop

WorkingDays2 = intCount

Exit_WorkingDays2:
Exit Function

Err_WorkingDays2:
Select Case Err

Case Else
MsgBox Err.Description
Resume Exit_WorkingDays2
End Select

End Function

'*********** Code End **************
Avatar billede cool_m_f Nybegynder
20. juli 2008 - 03:18 #8
strikkede lige dette her sammen, kunne godt laves smartere, men det er blevet for sent


'************************************************************************
start = #22-dec-2008#
slut = #31-dec-2008#
Dim h(11)              ' et array med helligdage
h(0) = #01-jan-2008#
h(1) = #20-mar-2008#
h(2) = #21-mar-2008#
h(3) = #23-mar-2008#
h(4) = #24-mar-2008#
h(5) = #18-apr-2008#
h(6) = #01-may-2008#
h(7) = #11-may-2008#
h(8) = #12-may-2008#
h(9) = #05-jun-2008#
h(10) = #25-dec-2008#
h(11) = #26-dec-2008#

antal = 0
intDays = DateDiff("d", start, slut)  ' antal dage der skal kontrolleres

For a = 0 To intdays  'vi kontrollerer hver dag
dato = DateAdd("d" , a , start)
If Weekday(dato) <> 1 And Weekday(dato) <> 7 Then  ' er det ikke en lørdag eller søndag
hdag = "nej"
For i = 0 To UBound(h)  ' så checker vi om det er en helligdag
If h(i) = dato Then
hdag="ja"
Exit For
End If
Next

If hdag <> "ja" Then antal=antal+1 'hvis ikke så er det en arbejdsdag
End If
Next

WScript.Echo intDays+1 ' antal dage mellem start og slut
WScript.Echo antal    ' antal arbejdsdage
'*************************************************************************

forhåbentlig uden fejl, men check lige
Avatar billede kjulius Novice
20. juli 2008 - 12:35 #9
Det med at finde de skæve helligdage (Lørdag/Søndag er jo ikke noget problem), er blevet behandlet flere gange her på Eksperten.dk. For bare at henvise til et par stykker:

Du bør kunne  bruge de funktioner, som macho (og for den sags skyld, excelent) offentliggjorde i spørgsmålet:

http://www.eksperten.dk/spm/685233

Du skal så bare loope dine datoer igennem, og teste, om den enkelte dato i dit interval er en weekend/helligdag (og tælle dem, der ikke er).

Siden http://www.vgnet.dk/excel-vba/datotid.htm indeholder også en del funktioner til beregninger ifbm. datoer.

Endelig er der en artikel, der beskriver hvordan man laver en UDF (User Defined Function) i MS SQL til at finde de skæve helligdage (hvis du engang skulle ønske at lægge beregningen ned på dabaseniveau, og iøvrigt arbejder på en MS SQL server).
Det koster dig 5 point at se artiklen, men den er rigeligt "pengene" værd.

http://www.eksperten.dk/artikler/107
Avatar billede mihl Nybegynder
09. september 2008 - 21:28 #10
cool_m_f smid et svar.
Avatar billede mihl Nybegynder
14. januar 2009 - 12:12 #11
cool_m_f ville åbenbart ikke have point... Så tager jeg dem da bare selv...
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
Kurser inden for grundlæggende programmering

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