Avatar billede s_h_m Nybegynder
12. juli 2003 - 21:51 Der er 3 kommentarer og
1 løsning

Funktion der returnerer værdi efter dato

Hej Eksperter.

Jeg har et par funktioner, jeg bruger i en kalender, de viser om dagen er en helligdag.
Jeg har fundet funktionerne på www.erlandsendata.no og rettet dem til så de viser danske helligdage/nationaldage.

Men nu er jeg blevet mere ambitiøs.
Jeg søger en funktion, der kan returnere helligdagens navn, i øjeblikket bruger jeg funktionerne sammen med en hvis-sætning:
=HVIS(Helligdag(B6;FALSK;FALSK)=SAND;"Helligdag";HVIS(D6<>"";D6;""))
B6 = dato, D6 = Andet fravær valgt fra en liste.

Jeg ved ikke om det hjælper, men her kommer funktionerne:

Function Påskedag(InputYear As Integer) As Long ' Returnerer datoen for Påskedag
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

Function Helligdag(lngdate As Long, InclSaturdays As Boolean, _
    InclSundays As Boolean) As Boolean
' Returnerer Sand hvis lngDate er en Dansk helligdag/nationaldag
' (valgfri inkludering af lørdag/søndag)
' bruger funktionen Påskedag
Dim InputYear As Integer, PD As Long, OK As Boolean
    If lngdate <= 0 Then lngdate = Date
    InputYear = Year(lngdate)
    PD = Påskedag(InputYear)
    OK = True
    Select Case lngdate ' Tester nedenstående påstande mod datoen
        Case DateSerial(InputYear, 1, 1) ' Nytårsdag
        Case PD - 3 ' Skærtorsdag
        Case PD - 2 ' Langfredag
        Case PD ' Påskedag
        Case PD + 1 ' 2. Påskedag
        Case DateSerial(InputYear, 6, 5) ' Grundlovsdag
        Case PD + 26 ' Store Bededag
        Case PD + 39 ' Kristi Himmelfartsdag
        Case PD + 49 ' Pinsedag
        Case PD + 50 ' 2. Pinsedag
        Case DateSerial(InputYear, 12, 24) ' Julaftensdag
        Case DateSerial(InputYear, 12, 25) ' 1. Juledag
        Case DateSerial(InputYear, 12, 26) ' 2. Juledag
        Case DateSerial(InputYear, 12, 31) ' Nytårsaftensdag
        Case Else
            OK = False
            If InclSaturdays Then ' Tester lørdage, hvis de skal medtages
                If WeekDay(lngdate, vbMonday) = 6 Then
                    OK = True
                End If
            End If
            If InclSundays Then ' Tester søndage, hvis de skal medtages
                If WeekDay(lngdate, vbMonday) = 7 Then
                    OK = True
                End If
            End If
    End Select
    Helligdag = OK
End Function

Kan det lade sig gøre, eller er jeg for ambitiøs?
Avatar billede kabbak Professor
13. juli 2003 - 10:42 #1
Jeg har lige modificeret din sidste funktion, det skulle kunne gøre det.

Function HelligdagsNavn(lngdate As Long, InclSaturdays As Boolean, _
    InclSundays As Boolean) As String
' Returnerer Sand hvis lngDate er en Dansk HelligdagsNavn/nationaldag
' (valgfri inkludering af lørdag/søndag)
' bruger funktionen Påskedag
Dim InputYear As Integer, PD As Long, OK As Boolean
    If lngdate <= 0 Then lngdate = Date
    InputYear = Year(lngdate)
    PD = Påskedag(InputYear)
      OK = True
    Select Case lngdate ' Tester nedenstående påstande mod datoen
        Case DateSerial(InputYear, 1, 1): HelligdagsNavn = "Nytårsdag"
        Case PD - 3: HelligdagsNavn = "Skærtorsdag"
        Case PD - 2: HelligdagsNavn = "Langfredag"
        Case PD: HelligdagsNavn = "Påskedag"
        Case PD + 1: HelligdagsNavn = "2. Påskedag"
        Case DateSerial(InputYear, 6, 5): HelligdagsNavn = "Grundlovsdag"
        Case PD + 26: HelligdagsNavn = "Store Bededag"
        Case PD + 39: HelligdagsNavn = "Kristi Himmelfartsdag"
        Case PD + 49: HelligdagsNavn = "Pinsedag"
        Case PD + 50: HelligdagsNavn = "2. Pinsedag"
        Case DateSerial(InputYear, 12, 24): HelligdagsNavn = "Julaftensdag"
        Case DateSerial(InputYear, 12, 25): HelligdagsNavn = "1. Juledag"
        Case DateSerial(InputYear, 12, 26): HelligdagsNavn = "2. Juledag"
        Case DateSerial(InputYear, 12, 31): HelligdagsNavn = "Nytårsaftensdag"
        Case Else
          End Select
            OK = False
            If InclSaturdays Then ' Tester lørdage, hvis de skal medtages
                If Weekday(lngdate, vbMonday) = 6 Then
                    HelligdagsNavn = HelligdagsNavn & " Lørdag"
                End If
            End If
            If InclSundays Then ' Tester søndage, hvis de skal medtages
                If Weekday(lngdate, vbMonday) = 7 Then
                HelligdagsNavn = HelligdagsNavn & " Søndag"
                End If
          End If
 
End Function
Avatar billede kabbak Professor
13. juli 2003 - 10:43 #2
ps. den kalder også din 'Function Påskedag', så den skal også være der
Avatar billede Slettet bruger
13. juli 2003 - 10:53 #3
Du kan måske bruge det følgende:
I A1 indtastes 1-1-2003 hvis det er år 2003 du ønsker at generere helligdagene for.
Herefter indtastes i kolonne A og B fra og med række 3 og nedefter:

        A      B
række3  =A1    Nytårsdag
række4  =A6-3  Skærtorsdag
række5  =A6-2  Langfredag
række6  =AFRUND.GULV(DAG(MINUT(ÅR(A1)/38)/2+56)&"/5/"&ÅR(A1);7)-34
række7  =A6+1  2. påskedag
række8  =A6+26  Store bededag
række9  =A6+39  Kristi himmelfartsdag
række10 =A6+49  Pinsedag
række11 =A6+50  2. pinsedag
række12 =DATO(ÅR(A$1);6;5), Grundlovsdag
række13 =DATO(ÅR(A$1);12;24), Juleaftensdag
række14 =DATO(ÅR(A$1);12;25), 1. juledag
række15 =DATO(ÅR(A$1);12;26), 2. juledag

I D3 indtastes: =A1, i D4 indtastes: =D3+1. Sidstnævnte formel kopieres nedad til og med D367.
Endelig indtastes i E3 følgende formel
=HVIS(ER.FEJL(LOPSLAG(D3;$A$3:$B$15;2;0));"";LOPSLAG(D3;$A$3:$B$15;2;0))
formlen kopieres nedad til og med F367.

Med venlig hilsen
Hans
Avatar billede s_h_m Nybegynder
13. juli 2003 - 13:17 #4
kabbak > Det er simpelthen perfekt, og det ser også ret enkelt ud, hvis man kender til vba. Jeg havde prøvet med endnu en funktion, men det virkede ikke.
Jeg har fået det som jeg ville, og har lært noget nyt. Mange tak. :o))

dkhanknu > Jeg har ikke efterprøvet din løsning, da kabbaks løsning, er lige præcis det jeg ledte efter.
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