Avatar billede macho Praktikant
04. februar 2006 - 09:29 Der er 15 kommentarer og
1 løsning

Skal tælle timer, hvis dato IKKE er helligdag eller weekend.

Hej,

Jeg har følgende formel, som tæller om der står "F" i en celle i en hel række med datoer fra 1-31:

=HVIS($B6="";"";TÆL.HVIS(C6:AG6;"F")*7,4)

Hvis der står "F", skal den tælle 7,4. Jeg vil meget gerne, at datoen er en helligdag eller weekend, så skal den IKKE tælle 7,4 selv om der står "F" i en eller flere celler.  Så på en eller anden måde, vil jeg altså gerne have puttet dette ind i formlen:

HVIS(ErHelligdag(C6:AG6;FALSK;FALSK)

så den ikke tæller, hvis "F" står på en helligdag eller i weekenden.
Avatar billede excelent Ekspert
04. februar 2006 - 10:28 #1
hvis du i fritekstsøgning taster  helligdage
så får du en mase spørgsmål som omhandler dit spørgsmål
Avatar billede macho Praktikant
04. februar 2006 - 11:04 #2
Jamen, tak for hintet excelent :-)

Dog HAR jeg skam allerede brugt fritekst-søgningen og fundet et hav af indlæg, som omhandler helligdage. Selv om jeg fandt meget, så har jeg altså ikke fundet noget, som kan hjælpe mig med mit specifikke problem!
Avatar billede excelent Ekspert
04. februar 2006 - 11:14 #3
ok så prøv :
Avatar billede excelent Ekspert
04. februar 2006 - 11:16 #4
Sættes ind i et modul
(kunne ikke finde oprindelig kilde, men Bak har indsat det i et spørgsmål)
Tilføjelsesprorammerne Analysis ToolPak & Analysis ToolPak-VBA indstalleres
Denne funktion kan beregne om en given dato er en søn- eller helligdag.
skriv en dato i fx. A1 og i B2 skriv
=Isholiday(A1;Falsk;Sand)

Hvis dagen er søn/helligdag returneres Sand ellers falsk.

Function EasterSunday(InputYear As Integer) As Long
' Returns the date for Easter Sunday, does not depend on Excel
Dim d As Integer
    d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21
    EasterSunday = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - _
        ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7)
End Function


Function IsHoliday(lngDate As Long, InclSaturdays As Boolean, _
    InclSundays As Boolean) As Boolean
' returns True if lngDate is a Norwegian holiday
' (optionally included Saturdays/Sundays)
' benytter funksjonen EasterSunday
Dim InputYear As Integer, ES As Long, OK As Boolean
    If lngDate <= 0 Then lngDate = Date
    InputYear = Year(lngDate)
    ES = EasterSunday(InputYear)
    OK = True
    Select Case lngDate
        Case DateSerial(InputYear, 1, 1) ' 1. Nyttårsdag
        'Case ES - 4 ' Onsdag før påske
        Case ES - 3 ' Skjærtorsdag
        Case ES - 2 ' Langfredag
        Case ES ' 1. Påskedag
        Case ES + 1 ' 2. Påskedag
        Case DateSerial(InputYear, 5, 1) ' 1. mai
        Case DateSerial(InputYear, 5, 17) ' 17. mai
        Case ES + 39 ' Kristi Himmelfartsdag
        'Case ES + 48 ' Pinseaften
        Case ES + 49 ' 1. Pinsedag
        Case ES + 50 ' 2. Pinsedag
        'Case DateSerial(InputYear, 12, 24) ' Julaften
        Case DateSerial(InputYear, 12, 25) ' 1. Juledag
        Case DateSerial(InputYear, 12, 26) ' 2. Juledag
        'Case DateSerial(InputYear, 12, 31) ' Nytårsaften
        Case Else
            OK = False
            If InclSaturdays Then
                If Weekday(lngDate, vbMonday) = 6 Then
                    OK = True
                End If
            End If
            If InclSundays Then
                If Weekday(lngDate, vbMonday) = 7 Then
                    OK = True
                End If
            End If
    End Select
    IsHoliday = OK
End Function
Avatar billede excelent Ekspert
04. februar 2006 - 11:18 #5
Det virker i min XP Excel 2003
Avatar billede macho Praktikant
04. februar 2006 - 11:22 #6
Åh... excelent, selve funktionen ErHelligdag HAR jeg allerede med i mit skema med datoerne; det er ikke DET, det er problemet. Problemet er "kun" selve formlen, som jeg vil have til at tælle 7,4 timer for alle hverdage hvis der står "F" i cellen. Som formlen er nu, så tæller den 7,4 timer på alle dage, incl. week-ender og helligdage.

Håber jeg har gjort mig lidt mere forståelig nu! Sorry, hvis du har misforstået mig!
Avatar billede excelent Ekspert
04. februar 2006 - 11:38 #7
ok, så skal vi nok ha fat i ANTAL.ARBEJDSDAGE el ARBEJDSDAG
vil gerne forsøge at hjælpe, men andre må gerne blande sig
det vil være lettere for mig at overskue problemet hvis
du viser lidt mere af hvordan din beregninger ser ud
Avatar billede excelent Ekspert
04. februar 2006 - 12:57 #8
eks
1]    C          D        E
2]
3]
4]
5]  1-1-2006  2-1-2006  3-1-2006
6]    F                      F
7]  FALSK      FALSK        7,4

i dette eksembel skal der indsættes en exta række til beregning
i cellerne C7 indsætes følgende formel, kopier den herefter til resten af rækken
=HVIS(C6="F";HVIS(Isholiday(C5;FALSK;SAND)=FALSK;HVIS(ANTAL.ARBEJDSDAGE(C5;C5)=1;7,4)))
så får du nogle celler med 7,4 som du kan summere

isholyday(celle;FALSK;SAND) er den funktion jeg fik ved at hente funktionen
fra tidligere omtalte spørgsmål
mit bedste bud lige nu :-)
Avatar billede excelent Ekspert
04. februar 2006 - 12:59 #9
hmm F'erne har forskudt sig en smule, der skal stå F i C og E kolonne
Avatar billede excelent Ekspert
04. februar 2006 - 15:48 #10
Den/de ekstra række med beregning kan evt. lægges i et nyt/tomt ark
hvis der ikke er plads i aktuel ark
Avatar billede macho Praktikant
04. februar 2006 - 16:49 #11
Jeg fandt nu frem til en anden løsning, som er en mellemregning på, om en given dato er på en lør-, søn- eller helligdag.

=HVIS(OG(ErHelligdag(C$3;SAND;SAND);(C4="F"));"7,4";"")

Denne mellemregning er så kopieret til 31 celler og har fundet samlet sum (BS4) for "F" på denne type dato'er.

Denne sum trækker jeg så fra min første formel, så den nu ser således ud:

=HVIS($B6="";"";TÆL.HVIS(C6:AG6;"F")*7,4-BS4)

Mellemregningerne har jeg så efterfølgende bare skjult.
Avatar billede excelent Ekspert
04. februar 2006 - 16:54 #12
ok well done :-) hovedsagen er at du fandt en løsning der virker
Avatar billede excelent Ekspert
04. februar 2006 - 17:03 #13
jeg kan se at den funktion du bruger til at teste om en given
dato er en helligdag eller ej, ikke er den samme som min
kan jeg få en kopi, eller henvisning?
Point går naturligvis til dig idet du fandt en løsning
v.h.Poul
Avatar billede macho Praktikant
04. februar 2006 - 17:23 #14
Det er vel noget lignende - du får den her:

Først funktionen "ErHelligdag":
***************
Function ErHelligdag(ByVal TestDato As Long, _
    Optional ByVal InclLørdage As Boolean = True, _
    Optional ByVal InclSøndage As Boolean = True) As Boolean
 
    Dim InputYear As Integer, PD As Long, OK As Boolean
    If TestDato <= 0 Then TestDato = Date
    InputYear = Year(TestDato)
    PD = Påskedag(InputYear)
    OK = True
    Select Case TestDato
        Case DateSerial(InputYear, 1, 1) ' Nytårsdag
        Case PD - 7    ' Palmesøndag
        Case PD - 3    ' Skærtorsdag
        Case PD - 2    ' Langfredag
        Case PD        ' Påskedag
        Case PD + 1    ' 2. påskedag
        Case PD + 26    ' St. Bededag
        Case PD + 39    ' Kristi Himmelfartsdag
        Case PD + 49    ' Pinsedag
        Case PD + 50    ' 2. Pinsedag
        Case DateSerial(InputYear, 12, 25) ' Juledag
        Case DateSerial(InputYear, 12, 26) ' 2. Juledag
        Case DateSerial(InputYear, 12, 31) ' Nytårsaftensdag
        Case Else
            OK = False
            If InclLørdage Then
                If Weekday(TestDato, vbMonday) = 6 Then
                    OK = True
                End If
            End If
            If InclSøndage Then
                If Weekday(TestDato, vbMonday) = 7 Then
                    OK = True
                End If
            End If
    End Select
    ErHelligdag = OK
End Function

****************

Og nu funktionen, der klarer påsken:
****************

Function Påskedag(InputYear As Integer) As Long
    Dim d As Integer
    d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21
    Påskedag = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - _
        ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7)
End Function

***************

Funktionen "UgeNr":

***************
Function UgeNr(Dato)
    UgeNr = Format(Dato, "ww", vbMonday, vbFirstFourDays)
End Function
*************

Håber du kan bruge dem til noget! Takker dig også for tiden, du har brugt på mit spørgsmål!
Avatar billede excelent Ekspert
04. februar 2006 - 17:28 #15
ok tak
Avatar billede macho Praktikant
04. februar 2006 - 17:37 #16
Så lukker vi spørgsmålet!
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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