1 Fragen und Antworten zur Computerbedienung Thema : Titel Thema Feiertage Stichwort Berechnen mit VBA Programm VBA Letzte Anpassung 11.05.2015 Kurzbeschreibung: Feiertage berechnen ist ja bekanntlich nicht ganz einfach. Viele Feiertage sind von Jahr zu Jahr an unterschiedlichen Tagen (variable Feiertage). 9 Feiertage sind von den Ostern abhängig und diverse andere Feiertage sind jeweils an einem Sonntag im Monat (z.B. 3 So im Sept). Beschreibung: Hier finden Sie 2 Funktionen die dieses Problem perfekt lösen. a) Function OsterSonntag(Jahr As Integer) as Date b) Function FeiertagText(DatumX As Date, OsternJh As Date) As String Sie sehen unten eine Tabelle in der in der Spalte A ein austeigendes Datum (Kalender) eingetragen ist. In der Spalte B kann nun durch die beiden hier präsentierten Funktionen die Feiertage oder der Name des Tages eingetragen werden. Hier das Resultat ( Ausschnitt der Tabelle) Der folgende Beispielcode erledigt das …. ' Feiertage eintragen Ostern = OsterSonntag(Jahr) For i = lngR To lngR + 370 Öffentliches Dokument gratis zu beziehen bei www.tiggi.ch Ersteller Martin Küttel 2 Fragen und Antworten zur Computerbedienung Thema : With ActiveSheet Datum = Format(.Cells(i, 1).Value, "dd.mm.yyyy") ' Datum aus Spalte A strDatum = FeiertagText(Datum, Ostern) .Cells(i, 2).Value = strDatum End With Next lngRa Im Folgenden sind die beiden Funktionen zu sehen. Sie können diesen Code mit Copy Paste in Ihr VBA Programm übernehmen. Function OsterSonntag(Jahr As Integer) as date Dim d As Integer d = (((255 - 11 * (Jahr Mod 19)) - 21) Mod 30) + 21 OsterSonntag = DateSerial(Jahr, 3, 1) + d + (d > 48) + 6 - ((Jahr + Jahr \ 4 + d + (d > 48) + 1) Mod 7) End Function Function FeiertagText(DatumX As Date, OsternJh As Date) As String ' gibt entweder einen Feiertag zurück oder den Namen des Tages z.B. Montag ' Funktion DateSerial(Jahr,Monat,Tag) ' Ostern mit der Funktion Ostersonntag ermitteln ' Muttertage immer 2. Sonntag im Mai ' Vatertag immer 1. Sonntag im Juni landesweit ' BussBettag immer 3. Sonntag im September ' Reformtionstag immer am 1 Sonntag im November Dim Muttertag As Date Dim Vatertag As Date Dim BussBettag As Date Dim Reformtag As Date Dim SoZä As Integer Jahr = Year(DatumX) Monat = Month(DatumX) 'Die Speziellen Feiertage Muttertag = DateSerial(Jahr, 5, 1) Öffentliches Dokument gratis zu beziehen bei www.tiggi.ch Ersteller Martin Küttel 3 Fragen und Antworten zur Computerbedienung Thema : SoZä = 0 For i = 1 To 20 If Weekday(Muttertag) = 1 Then SoZä = SoZä + 1 If SoZä = 2 Then Exit For Muttertag = Muttertag + 1 Next i SoZä = 0 Vatertag = DateSerial(Jahr, 6, 1) For i = 1 To 13 If Weekday(Vatertag) = 1 Then SoZä = SoZä + 1 If SoZä = 1 Then Exit For Vatertag = Vatertag + 1 Next i SoZä = 0 BussBettag = DateSerial(Jahr, 9, 1) SoZä = 0 For i = 1 To 27 If Weekday(BussBettag) = 1 Then SoZä = SoZä + 1 If SoZä = 3 Then Exit For BussBettag = BussBettag + 1 Next i SoZä = 0 Reformtag = DateSerial(Jahr, 11, 1) For i = 1 To 13 If Weekday(Reformtag) = 1 Then SoZä = SoZä + 1 If SoZä = 1 Then Exit For Reformtag = Reformtag + 1 Next i ' Feiertag als Text ermitteln Select Case DatumX Case Is = DateSerial(Jahr, 1, 1) FeiertagText = "Neujahr" Case Is = DateSerial(Jahr, 1, 2) Öffentliches Dokument gratis zu beziehen bei www.tiggi.ch Ersteller Martin Küttel 4 Fragen und Antworten zur Computerbedienung Thema : FeiertagText = "Berchtoldstag" Case Is = DateSerial(Jahr, 1, 6) FeiertagText = "Hl.3 Koenige" Case Is = DateSerial(Jahr, 2, 14) FeiertagText = "Valentintag" Case Is = OsternJh - 52 FeiertagText = "Altweiber" Case Is = OsternJh - 48 FeiertagText = "Rosenmontag" Case Is = OsternJh - 2 FeiertagText = "Karfreitag" Case Is = OsternJh FeiertagText = "Ostersonntag" Case Is = OsternJh + 1 FeiertagText = "Ostermontag" Case Is = DateSerial(Jahr, 5, 1) FeiertagText = "Tag der Arbeit" Case Is = Muttertag FeiertagText = "Muttertag" Case Is = Vatertag FeiertagText = "Vatertag" Case Is = OsternJh + 39 FeiertagText = "Auffahrt" Case Is = OsternJh + 49 FeiertagText = "Pfingsten" Case Is = OsternJh + 50 FeiertagText = "Pfingstmontag" Case Is = OsternJh + 60 FeiertagText = "Fronleichnam" Case Is = DateSerial(Jahr, 8, 1) FeiertagText = "Nationalfeiertag" Case Is = BussBettag FeiertagText = "Buss & Bettag" Öffentliches Dokument gratis zu beziehen bei www.tiggi.ch Ersteller Martin Küttel 5 Fragen und Antworten zur Computerbedienung Thema : Case Is = DateSerial(Jahr, 11, 1) FeiertagText = "Allerheiligen" Case Is = Reformtag FeiertagText = "Reformationstag" Case Is = DateSerial(Jahr, 12, 6) FeiertagText = "St. Niklaus" Case Is = DateSerial(Jahr, 12, 24) FeiertagText = "heilig Abend" Case Is = DateSerial(Jahr, 12, 25) FeiertagText = "Weihnachten" Case Is = DateSerial(Jahr, 12, 26) FeiertagText = "Stephantag" Case Is = DateSerial(Jahr, 12, 31) FeiertagText = "Sylvester" Case Else FeiertagText = Format(DatumX, "dddd") End Select End Function Öffentliches Dokument gratis zu beziehen bei www.tiggi.ch Ersteller Martin Küttel
© Copyright 2024 ExpyDoc