Avatar billede morlindb Nybegynder
02. juni 2015 - 14:07 Der er 8 kommentarer

Turnaround tid weekender og danske helligdage undaget.

Forskelle på to tidspunkter i tid. Danske helligdage og weekender undtaget

A) start 15/10/2014 15:30    slut 21/10/2014 10:53
B) start 15/10/2014 15:36    slut 21/10/2014 10:54
c) start 16/10/2014 14:21    slut 16/10/2014 14:20

Jeg ønsker resultatet eks 3 dage, 4 timer og 21 min.
Jeg arbejder i Excel 2013.
Avatar billede kim1a Ekspert
02. juni 2015 - 14:14 #1
Jeg følger lige med - noget jeg godt kunne bruge.
Avatar billede finb Ekspert
02. juni 2015 - 14:18 #2
Har ikke tid til at lave det lige nu,
men  ideen er:

Lav en liste med danske helligdage
og lav enten VBA, eller
"hvis <> (forskellig fra)..."
Avatar billede claes57 Ekspert
02. juni 2015 - 14:57 #3
jeg har for 10 år siden lavet noget asp-kode der beregner alle danske helligdage. Lavet til en blomsterbutik, så advent og morsdag er med - de skal lige pilles ud.
start med at finde antal dage / timer /minutter
med den kan du loope fra fra- til til-dato og tjekke om det er en helligdag - hvis ja, så fratræk 1 dag i resultat.
koden er her (skal modificeres lidt til excel)
----------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<title>Bare end kalender...</title>
<SCRIPT language=JavaScript>
  var browserID = "n";
  if (navigator.appName.indexOf("Microsoft")>=0){browserID="i";}
</script>
</head>
<body>
<%
sidenavn = LCase(Request.Servervariables("SCRIPT_NAME"))

Function getdaysinmonth(strmonth,stryear)
  datoen=cdate("01-" & strmonth & "-" & stryear)
  datoen=dateadd("m",1,datoen)
  datoen=dateadd("d",-1,datoen)
  getDaysInMonth=datepart("d",datoen)
End Function

Function SkrivStortBogstav(tekst)
  SkrivStortBogstav=ucase(left(tekst,1)) & lcase(mid(tekst,2,len(tekst)))
End Function

Function Helligdage(strdato)
aar=CInt(datepart("yyyy",strdato))  'skal være mellem 1901 & 2199
m= array(0,1,4,4,0,2,5,0,3,6,1,4,6)
gyldental=(aar+1) mod 19
if gyldental=0 then gyldental=19
epakt= ((gyldental-1)*11)mod 30
if aar>1899 and aar<2200 then epakt=epakt-1
epakt=epakt mod 30
DagTilFj=80
if gyldental=6 or gyldental=17 then DagTilFj=81
alder=(epakt+DagTilFj) mod 30
if alder<=13 then antaldg=13-alder
if alder>13 then antaldg=43-alder
fuldmaane=21+antaldg
if fuldmaane<=31 then
    dato=fuldmaane
    maaned=3
else
    dato=fuldmaane-31
    maaned=4
end if
korrektion=(5+aar+aar\4-aar\100+aar\400) mod 7
if aar/4=int(aar/4) and (maaned=1 or maaned=2) then
    if aar/100<>int(aar/100) then korrektion=korrektion-1
    if aar/100 =int(aar/100) then korrektion=korrektion-1
end if
u=(dato+m(maaned)+korrektion)mod 7
paaske=dato+7-u
if paaske>31 then
    paaske=paaske-31
    maaned=4
end if
str = paaske & "-" & maaned &"-"& aar
datoto = cdate("24-12-" & datepart("yyyy",strdato))
juldag = weekday(datoto, vbMonday)
soendag = dateadd("d",0-juldag,datoto)

if strdato = cdate(str)-49 then
  Helligdage = "Fastelavn"
elseif strdato = cdate(str)-7  then
  Helligdage = "Palmesøndag"
elseif strdato = cdate(str)-3  then
  Helligdage = "Skærtorsdag"
elseif strdato = cdate(str)-2  then
  Helligdage = "Langfredag"
elseif strdato = cdate(str)    then
  Helligdage = "Påskedag"
elseif strdato = cdate(str)+1  then
  Helligdage = "2. Påskedag"
elseif strdato = cdate(str)+26 then
  Helligdage = "St. Bededag"
elseif strdato = cdate(str)+39 then
  Helligdage = "Kr. Himmelfartsdag"
elseif strdato = cdate(str)+49 then
  Helligdage = "Pinsedag"
elseif strdato = cdate(str)+50 then
  Helligdage = "2. Pinsedag"
elseif strdato = cdate("1-1-" & datepart("yyyy",strdato)) then
  Helligdage = "Nytårsdag"
elseif strdato = cdate("5-6-" & datepart("yyyy",strdato)) then
  Helligdage = "Grundlovsdag / Fars dag"
elseif strdato = cdate("24-12-" & datepart("yyyy",strdato)) then
  Helligdage = "Juleaften"
elseif strdato = cdate("25-12-" & datepart("yyyy",strdato)) then
  Helligdage = "Juledag"
elseif strdato = cdate("26-12-" & datepart("yyyy",strdato)) then
  Helligdage = "2. Juledag"
elseif strdato = cdate("31-12-" & datepart("yyyy",strdato)) then
  Helligdage = "Nytårsaften"
elseif strdato = soendag then
  Helligdage = "4. søndag i Advent"
elseif strdato = dateadd("ww",-1,soendag) then
  Helligdage = "3. søndag i Advent"
elseif strdato = dateadd("ww",-2,soendag) then
  Helligdage = "2. søndag i Advent"
elseif strdato = dateadd("ww",-3,soendag) then
  Helligdage = "1. søndag i Advent"
else
  Helligdage = ""
end if
End Function

strtoday = Date()
stryear = Year(strtoday)
strmonth = Month(strtoday)
If Request("month") <> "" Then strmonth = request("month")
If Request("year") <> "" Then stryear = request("year")

strdaysinmonth = getdaysinmonth(strmonth,stryear)
%>
<table border="0" bgcolor="#C0C0C0" width="490" height="145" style="border: 1px solid #000000;">
  <tr>
  <td>
Kalender for <Select size="1"
                    id="months"
                    name="months"
                    onchange="if (browserID=='n'){months = document.getElementById('months'); years = document.getElementById('years');};location.href ='<%=sidenavn%>?month='+months.value+'&year='+years.value">
<%
    For i = 1 To 12
      Response.Write "<option value=" & i
      If CInt(strmonth) = i Then Response.Write " SELECTED"
      Response.Write "> " & SkrivStortBogstav(MonthName(i,false))
      Response.Write " </option>" & vbCrLf
    Next
%>
</Select>&nbsp;&nbsp;
<Select size="1"
        name="years"
        id="years"
        onchange="if (browserID=='n'){months = document.getElementById('months'); years = document.getElementById('years');};location.href ='<%=sidenavn%>?month='+months.value+'&year='+years.value">
<%
for i = CInt(stryear)-10 to CInt(stryear)+10
    Response.Write "<option value=" & i
    If CInt(stryear) = i Then Response.Write " SELECTED"
    Response.Write ">" & i & "</option>" & vbCrLf
next
%>
</Select>
</td><td align="right">
                    <a href="<%=sidenavn%>?month=<%=datepart("m",strtoday)%>&year=<%=datepart("yyyy",strtoday)%>"
                        title="Vis aktuel måneds kalender"
                        onMouseOver="window.status=''; return true"
                        onMouseOut="window.status=''">&nbsp;DD&nbsp;</a>
  </td>
  </tr>
  <tr>
    <td width="280" align="left" valign="top">
        <table cellpadding="0" cellspacing="0" border="0" bgcolor="#FFFFFF" width="100%" height="100%" style="border: 1px solid #000000;">
        <tr bgcolor="#CFCFCF">
<%
  for i=1 to 7
        response.write "<td align=""center"" width=""40""><b>"
      if i=7 then response.write "<font color=""#FF0000"">"
      response.write SkrivStortBogstav(left(weekdayname(i,false,vbMonday),3))
      if i=7 then response.write "</font>"
      response.write "</b></td>"
  next
%>
        </tr>
        <tr bgcolor="#CFCFCF"><td colspan="7"><hr></td></tr>
<!-- Kalender laves her -->
<%
datoen = CDate("01-" & strmonth & "-" & stryear)
firstday = Weekday(datoen, vbMonday)
aktday = 0
if (CInt(strmonth)=CInt(Month(strtoday))) and (CInt(stryear)=CInt(Year(strtoday))) then aktday = CInt(datepart("d",date))
tomme=firstday-1
if tomme>0 then
  response.write "<tr>" & vbCrLf
  lastmonth=cint(strmonth)-1
  lastyear=cint(stryear)
  if lastmonth=0 then
    lastmonth=12
    lastyear=lastyear-1
  end if
  for i=1 to tomme
    response.write "<td align=""center"" bgcolor=""#C0C0C0"" "
    response.write "onclick=""location.href ='" & sidenavn & "?month=" & lastmonth & "&year=" & lastyear & "'"""
    response.write "><font color=""#808080"">"
    response.write datepart("d",dateadd("d",i-(tomme+1),datoen))
    response.write "</font></td>" & vbCrLf
  next
end if
mddag=9-firstday
for i=1 to strdaysinmonth
  if i=aktday then
    strItToday = "<td align=""center"" style=""border: 1px solid #000000;""><font color=""#000000"">"
  else
    strItToday = "<td align=""center""><font color=""#000000"">"
  end if
  if (7+i-mddag) MOD 7 =6 then
    if i=aktday then
      strItToday = "<td align=""center"" bgcolor=""#FF8080"" style=""border: 1px solid #000000;""><font color=""#000000"">"
    else
      strItToday = "<td align=""center"" bgcolor=""#FF8080""><font color=""#000000"">"
    end if
  end if
  datoen = CDate(i & "-" & strmonth & "-" & stryear)
  strtxt = Helligdage(datoen)
  if CInt(strmonth)=5 and i>7 and i<15 and (7+i-mddag) MOD 7 = 6 then
    if strtxt="" then
      strtxt = "Mors dag"
    else
      strtxt = strtxt &  " / Mors dag"
    end if
  end if
  if len(strtxt) > 0 then
    if i=aktday then
      strItToday = "<td align=""center"" bgcolor=""#FF8080""style=""border: 1px solid #000000;"" onmouseover=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='" & strtxt & "';"" onmouseout=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='';""><font color=""#000000"">"
    else
      strItToday = "<td align=""center"" bgcolor=""#FF8080"" onmouseover=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='" & strtxt & "';"" onmouseout=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='';""><font color=""#000000"">"
    end if
  end if
  if (i-mddag) MOD 7 = 0 then response.write "<tr>" & vbCrLf
  response.write strItToday & i & "</td>" & vbCrLf
  if (i-mddag) MOD 7 = 6 then response.write "</tr>" & vbCrLf
next
if (firstday+strdaysinmonth-1) MOD 7 > 0 then
  nextmonth=cint(strmonth)+1
  nextyear=cint(stryear)
  if nextmonth=13 then
    nextmonth=1
    nextyear=nextyear+1
  end if
  for i=1 to 7-((firstday+strdaysinmonth-1) MOD 7)
    response.write "<td align=""center"" bgcolor=""#C0C0C0"""
    response.write "onclick=""location.href ='" & sidenavn & "?month=" & nextmonth & "&year=" & nextyear & "'"""
    response.write "><font color=""#808080"">" & i & "</font></td>" & vbCrLf
  next
  response.write "</tr>"
end if
%>
<!-- Kalender slut her -->
      </table>
        </td>
    <td valign="top" width="190">
    <table cellpadding="0" cellspacing="0" border="0" bgcolor="#FFFFFF" style="border: 1px solid #000000;" height="100%" width="100%">
    <tr bgcolor="#CFCFCF">
    <td><b>Dagens note:</b></td>
    </tr>
      <tr bgcolor="#CFCFCF"><td><hr></td></tr>
    <tr>
    <td height="100%" valign="top"><div id="texter" style="width:99%; height:99%;"></div></td>
    </tr>
    </table>
    </td>
  </tr>
</table>
</body></html>
Avatar billede Dan Elgaard Ekspert
02. juni 2015 - 16:02 #4
Find først datoen for Påskedag:
http://www.EXCELGAARD.dk/Bib/PAASKEDAG/

...og, alle andre danske helligdage er derefter lette at finde :-)

Derefter er det lige så let, at lave en hurtig lille funktion, der beregner tiden mellem de to tidspunkter...
Avatar billede jens48 Ekspert
02. juni 2015 - 23:38 #5
Jeg har lagt en fil til udregning på http://gratisupload.dk/f/8s12z3uho0
Avatar billede morlindb Nybegynder
08. juni 2015 - 13:52 #6
Tak for alle indslag. Jeg har brug for at det bliver målt i timer. Beklage jeg ikke var skarp å dette til at begynde med.

Lige nu har jeg benyttet
=+ANTAL.ARBEJDSDAGE(H7987;I7987;Ark1!$B$1:$B$28)
 
forklaring
H7987 = fra (dato format er 07-08-2014  09:01:17)
I7987 = til (dato format er 14-08-2014  11:47:00)
Ark1!$B$1:$B$28 = datoer som ikke tæller med i beregningen (helligdage)
Avatar billede morlindb Nybegynder
15. juni 2015 - 12:29 #7
NETWORKDAYS(A1,B1)-1-MOD(A1,1)+MOD(B1,1)

ER der nogen som kan gennemskue denne løsning bare på dansk
?
Avatar billede kim1a Ekspert
15. juni 2015 - 13:42 #8
Networkdays er antal.arbejdsdage så vidt jeg husker.

Mod er blot forskellen efter division.

Så formlen siger blot antal arbejdsdage - 1 - klokkeslet i A1 og + klokkeslet B2.
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

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