Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Opret ny bruger Opret ny bruger  Log ind Log ind


Helligdags Funktion - 1. Maj

 Besvar Besvar
Forfatter
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15-04-2014
Land: Danmark
Status: Offline
Point: 615
Indlæg funktioner Indlæg funktioner   Tak (0) Tak(0)   Citér Ib Hansen Citér  BesvarSvar Direkte link til dette indlæg Emne: Helligdags Funktion - 1. Maj
    Sendt: 17-07-2019 kl. 10:23
Hej Forum.

Jeg har en Helligdags Funktion i et modul.
Her vil jeg godt kunne definere, om 1. Maj skal vises som en helligdag eller ikke, afhængig af en værdi "Ja" / "Nej" i en celle.

1. Maj virker som en Case i koden nedenunder - Med blå.
Hvordan definerer jeg i "Ja" / "Nej" i koden - Med rød .


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 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 PD + 26: HelligdagsNavn = "Store Bededag"
        Case PD + 39: HelligdagsNavn = "Kr. Himmelfartsdag"
        Case PD + 49: HelligdagsNavn = "Pinsedag"
        Case PD + 50: HelligdagsNavn = "2. Pinsedag"
        
Rem        Case DateSerial(InputYear, 12, 24): HelligdagsNavn = "Julaftensdag"
        Case DateSerial(InputYear, 12, 25): HelligdagsNavn = "1. Juledag"
        Case DateSerial(InputYear, 12, 26): HelligdagsNavn = "2. Juledag"
Rem        Case DateSerial(InputYear, 12, 31): HelligdagsNavn = "Nytårsaftensdag"
        Case DateSerial(InputYear, 6, 5): HelligdagsNavn = "Grundlovsdag"
        
        
        
        Case DateSerial(InputYear, 5, 1): HelligdagsNavn = "1. Maj"
        
        If Sheets("Indstil").Range("D10") = "Ja" Then DateSerial(InputYear, 5, 1) = "1. Maj"
        If Sheets("Indstil").Range("D10") = "Nej" Then DateSerial(InputYear, 5, 1) = ""
        
        
        
        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
Hvis jeg ikke svarer med det samme, er det fordi, jeg kører udenby's nu Confused

På forhånd tak.

Ib
Excel 2010 Dk og 2016 Dk på samme computer.
Bruger dog stadig mest 2010, da jeg syntes 2016 mangler features..
Men sådan er der jo så majet :o)
Til top



Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15-04-2014
Land: Danmark
Status: Offline
Point: 615
Accepteret svar Accepteret svar
Indlæg funktioner Indlæg funktioner   Tak (0) Tak(0)   Citér Ib Hansen Citér  BesvarSvar Direkte link til dette indlæg Sendt: 23-07-2019 kl. 07:50
Hej Forum.

Oplæg
- Man har en dato-kolonne, hvor den første dato kan ændres efter behov - F.eks. hvis man kun vil vise 1 mdr. ad gangen i arket.
- I celle til højre for hver dato, (eller anden celle) vises det, om datoen er en Helligdag, med Helligdags-navnet.
- Nogle bruger 1. maj som en ½ Helligdag og andre ikke - Derfor skal 1. maj være valgfri.

Jeg løste problemet og løsningen består af to koder.


I dato Funktions-koden er det med blåt.
Option Explicit
'=========================================================================================
'=========================================================================================
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 HelligdagsNavn(lngdate As Long, InclSaturdays As Boolean, _
                        InclSundays As Boolean, Optional sYesNo As String) 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

    If lngdate <= 0 Then
        lngdate = Date
    End If

    InputYear = Year(lngdate)
    PD = Påskedag(InputYear)

    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 PD + 26: HelligdagsNavn = "Store Bededag"
        Case PD + 39: HelligdagsNavn = "Kr. Himmelfartsdag"
        Case PD + 49: HelligdagsNavn = "Pinsedag"
        Case PD + 50: HelligdagsNavn = "2. Pinsedag"
        Case DateSerial(InputYear, 6, 5): HelligdagsNavn = "Grundlovsdag"
        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 DateSerial(InputYear, 5, 1): HelligdagsNavn = "1. Maj"
            If UCase(sYesNo) = "YES" Then
                  HelligdagsNavn = "1. Maj"
            Else: HelligdagsNavn = ""
            End If
        Case Else
    End Select

    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


Denne kode indsættes i alle celler i Helligdags-kolonnen, der skal vise Helligdags-navnet.
=HVIS(A4=$P$10;HelligdagsNavn(A4; 0; 0; $P$11);HelligdagsNavn(A4; 0; 0))
- A4 = Datoen i dato-kolonnen - I næste celle bliver A4 selvfølgelig til A5 osv. der ned ad.
- $P$10 = Cellen med en fast dato = 1. maj, som A4 sammenlignes med.
- $P$11 = Cellen, hvor "YES" eller "" indsættes, f.eks. vha. en CheckBox.

Mvh.
Ib

God sommerferie Wink

Excel 2010 Dk og 2016 Dk på samme computer.
Bruger dog stadig mest 2010, da jeg syntes 2016 mangler features..
Men sådan er der jo så majet :o)
Til top
 Besvar Besvar
  Del emne   

Skift forum Forum tilladelser Se dropdown

© 2010 - 2019 Dansk Regneark Forum - en del af Excel-regneark.dk