in tabelle formelberechnung für feiertage...

29/03/2013 - 10:10 von michlchen | Report spam
hallo ng.

ich habe eine tabelle feiertage.

FTag FTag_Name Jahr
01.01.2012 Neujahr 2012
06.04.2012 Karfreitag 2012
...


jetzt gibt es eine tabelle feiertage_berechnungsformel.
(logik ist aus nem excelfile, also in A1 das jahr und automatische
berechnung)

FTag_Name Jahr Tag_fürs_Jahr
Logig
Neujahr 2012 01.01.2012
ÚTUM(jahr;1;1)
Karfreitag 2012 06.04.2012
=DM((TAG(MINUTE(jahr/38)/2+55)&".4."&jahr)/7;)*7-6
...

wenn in der tabelle feiertage kein einziger wert für ein bestimmtes
jahr ist (jahr über ne auswahlbox bestimmt) möchte ich jetzt
eigentlich nur in der spalte jahr per vba das jahr eintragen und dann
über die logik das datum ersetzen um bei tag_fürs_jahr das richtige
drin zu haben.

dann die entsprechenden spalten nehmen und an feiertage anfügen.
geht das? oder viel zu kompliziert gedacht und es gibt ne funktion
feiertage?

danke für die infos.
und frohe ostern.
 

Lesen sie die antworten

#1 Ekkehard Böhme
29/03/2013 - 15:55 | Warnen spam
Hallo Michel,

<schnipp>

und es gibt ne funktion feiertage?



Ja gibt es:

'Feiertagsberechnung :
'Quelle:
'http://www.access-o-mania.de/forum/index.php?topic480.msg89143;topicseen#msg89143
Option Compare Database
Option Explicit
'// -
'// Feiertagsberechnung nach dem Algorithmus von Carl
Friedrich Gauß
'// -
Type DtFeiertage
Jahreszahl As Long
Ostern As Date
Neujahr As Date
Karfreitag As Date
Ostersonntag As Date
Ostermontag As Date
Maifeiertag As Date
ChrHimmelfahrt As Date
Pfingstsonntag As Date
Pfingstmontag As Date
Fronleichnam As Date
DtEinheit As Date
Allerheiligen As Date
Heiligabend As Date
Weihnachten1 As Date
Weihnachten2 As Date
Sylvester As Date
End Type

Dim m_uDTF As DtFeiertage


Public Function Feiertag(mdatum As Date) As Boolean

Dim Jahreszahl As Integer
Dim mbol As Boolean

Jahreszahl = DatePart("yyyy", mdatum)

mbol = False

'// Als Refrenzdatum zunàchst m_uDTF.Ostern berechnen
If Not Ostern_berechnen(Jahreszahl) Then Exit
Function

'// Neujahr setzen (fester Feiertag am 1. Januar)
m_uDTF.Neujahr = DateSerial(Jahreszahl, 1, 1)
If mdatum = m_uDTF.Neujahr Then mbol = True

'// Karfreitag berechnen (beweglicher Feiertag; 2 Tage
vor Ostern)
m_uDTF.Karfreitag = m_uDTF.Ostern - 2
If mdatum = m_uDTF.Karfreitag Then mbol = True

'// Ostersonntag = m_uDTF.Ostern!
m_uDTF.Ostersonntag = m_uDTF.Ostern
If mdatum = m_uDTF.Ostersonntag Then mbol = True

'// Ostermontag berechnen (beweglicher Feiertag; 1 Tag
nach Ostern)
m_uDTF.Ostermontag = m_uDTF.Ostern + 1
If mdatum = m_uDTF.Ostermontag Then mbol = True

'// Maifeiertag setzen (fester Feiertag am 1. Mai)
m_uDTF.Maifeiertag = DateSerial(Jahreszahl, 5, 1)
If mdatum = m_uDTF.Maifeiertag Then mbol = True

'// Christi Himmelfahrt berechnen (beweglicher
Feiertag; 39 Tage nach Ostern)
m_uDTF.ChrHimmelfahrt = m_uDTF.Ostern + 39
If mdatum = m_uDTF.ChrHimmelfahrt Then mbol = True

'// Pfingstsonntag berechnen (beweglicher Feiertag; 49
Tage nach Ostern)
m_uDTF.Pfingstsonntag = m_uDTF.Ostern + 49
If mdatum = m_uDTF.Pfingstsonntag Then mbol = True

'// Pfingstmontag berechnen (beweglicher Feiertag; 50
Tage nach Ostern)
m_uDTF.Pfingstmontag = m_uDTF.Ostern + 50
If mdatum = m_uDTF.Pfingstmontag Then mbol = True

'// Fronleichnam berechnen (beweglicher Feiertag; 60
Tage nach Ostern)
m_uDTF.Fronleichnam = m_uDTF.Ostern + 60
If mdatum = m_uDTF.Fronleichnam Then mbol = True

'// Tag der deutschen Einheit setzen (fester Feiertag
am 3. Oktober)
m_uDTF.DtEinheit = DateSerial(Jahreszahl, 10, 3)
If mdatum = m_uDTF.DtEinheit Then mbol = True

'// Allerheiligen setzen (fester Feiertag am 1.
November)
m_uDTF.Allerheiligen = DateSerial(Jahreszahl, 11,
1)
If mdatum = m_uDTF.Allerheiligen Then mbol = True

'// Heiligabend setzen (fester 'Feiertag' am 24.
Dezember)
m_uDTF.Heiligabend = DateSerial(Jahreszahl, 12, 24)
If mdatum = m_uDTF.Heiligabend Then mbol = True

'// Erster Weihnachtstag setzen (fester 'Feiertag' am
25. Dezember)
m_uDTF.Weihnachten1 = DateSerial(Jahreszahl, 12,
25)
If mdatum = m_uDTF.Weihnachten1 Then mbol = True

'// Zweiter Weihnachtstag setzen (fester 'Feiertag' am
26. Dezember)
m_uDTF.Weihnachten2 = DateSerial(Jahreszahl, 12,
26)
If mdatum = m_uDTF.Weihnachten2 Then mbol = True

'// Sylvester setzen (fester 'Feiertag' am 31.
Dezember)
m_uDTF.Sylvester = DateSerial(Jahreszahl, 12, 31)
If mdatum = m_uDTF.Sylvester Then mbol = True

Feiertag = mbol

End Function

Function Ostern_berechnen(ByVal lYear As Long) As
Boolean

'// Berechnung mit Hilfe des Algorithmus von Gauß
On Error GoTo Err_Ostern_berechnen

Dim i1 As Integer
Dim i2 As Integer
Dim i3 As Integer
Dim i4 As Integer
Dim i5 As Integer
Dim iTZ As Integer '//
iTZ = Tageszahl

i1 = lYear Mod 19 '//
Formel nach Gauß
i2 = lYear Mod 4 '//
Werte für die Jahre
i3 = lYear Mod 7 '//
1900 - 2099

i4 = (19 * i1 + 24) Mod 30
i5 = (2 * i2 + 4 * i3 + 6 * i4 + 5) Mod 7
iTZ = 22 + i4 + i5 '//
Ermittelt den Tag
If iTZ > 31 Then '//
Màrz oder April
iTZ = iTZ - 31 '//
Wenn April, dann - 31 Tage
If iTZ = 26 Then iTZ = 19 '//
Wenn 26.4. dann 19.4.
If (iTZ = 25 And i4 = 28 And i1 > 10) Then iTZ
= 18
m_uDTF.Ostern = DateSerial(lYear, 4, iTZ) '//
Ostern im April
Else
m_uDTF.Ostern = DateSerial(lYear, 3, iTZ) '//
Ostern im Maerz
End If
Ostern_berechnen = True

Exit_Ostern_berechnen:
Exit Function

Err_Ostern_berechnen:
Ostern_berechnen = False
GoTo Exit_Ostern_berechnen

End Function

Habe ich allerdings selber noch nicht verwendet,
kann also nicht sagen, ob's ohne Probleme funzt.

und frohe ostern.

hth und ebenfalls
ekkehard böhme

Ähnliche fragen