Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
316to320
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
316to320
316to320
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datumsdifferenz ohne Sonn- und Feiertage

Datumsdifferenz ohne Sonn- und Feiertage
05.10.2003 21:30:41
Det
Hallo alle zusammen

Ich habe ein Problem bei der Berechnung der Datumsdifferenz.
Ich möchte, dass Samstage, Sonn- und Feiertage bei der Berechnung nicht gezählt werden. (VBA)

Gruß Det

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datumsdifferenz ohne Sonn- und Feiertage
05.10.2003 23:00:37
Christoph
Hi Det,
ich kann die nicht versprechen, ob das unter Excel'97 klappt.
unter Excel2000 kannst du die Funktion "WOCHENTAG" in VBA als Application.WorksheetFunction einbinden:

If Application.WorksheetFunction.Weekday(...,...) = ... Then ...

Gruß
Christoph
AW: Datumsdifferenz ohne Sonn- und Feiertage
05.10.2003 23:14:54
Panicman
Hallo Det,

da ich nicht weiß, aus welchem Bundesland du kommst, hab ich mal alle eingerechnet.
(Ich hoffe ich hab keinen vergessen).

A1 = Anfangsdatum
B1 = Enddatum


Option Explicit

Sub Werktage()
Dim ADat As Date
Dim EDat As Date
Dim I As Date
Dim At As Integer
Dim D As Integer
Dim Yr As Integer
'Feiertage
Dim Ostern As Date
Dim Neujahr As Date
Dim H3Könge As Date
Dim Rosenmontag As Date
Dim Karfreitag As Date
Dim Ostermontag As Date
Dim Christi_Himmelfahrt As Date
Dim Pfingstmontag As Date
Dim Fronleichnam As Date
Dim Maifeiertag As Date
Dim Nationalfeiertag As Date
Dim Erntedankfest As Date
Dim Reformationstag As Date
Dim Allerheiligen As Date
Dim Volkstrauertag As Date
Dim Buss_und_Betag As Date
Dim Totensonntag As Date
Dim erste_Weihnachtstag As Date
Dim zweiter_Weihnachtstag As Date

ADat = Range("A1").Value
EDat = Range("B1").Value

For I = ADat To EDat
    
    Yr = Year(I)
    D = (((255 - 11 * (Yr Mod 19)) - 21) Mod 30) + 21
    Ostern = DateSerial(Yr, 3, 1) + D + (D > 48) + 6 - _
             ((Yr + Yr \ 4 + D + (D > 48) + 1) Mod 7)
    
'von Ostern abhängige Feiertage
    Rosenmontag = Ostern - 48
    Karfreitag = Ostern - 2
    Ostermontag = Ostern + 1
    Christi_Himmelfahrt = Ostern + 39
    Pfingstmontag = Ostern + 50
    Fronleichnam = Ostern + 60
'Feste Feiertage
    Neujahr = DateSerial(Year(I), 1, 1)
    H3Könge = Neujahr + 5
    Maifeiertag = DateSerial(Year(I), 5, 1)
    Nationalfeiertag = DateSerial(Year(I), 10, 3)
    Erntedankfest = DateSerial(Year(I), 10, 1) + 7 - Weekday(DateSerial(Year(I), 10, 1), vbMonday)
    Reformationstag = DateSerial(Year(I), 10, 31)
    Allerheiligen = DateSerial(Year(I), 11, 1)
    Volkstrauertag = DateSerial(Year(I), 12, 25) - Weekday(DateSerial(Year(I), 12, 25), vbMonday) - 35
    Buss_und_Betag = DateSerial(Year(I), 12, 25) - Weekday(DateSerial(Year(I), 12, 25), vbMonday) - 32
    Totensonntag = DateSerial(Year(I), 12, 25) - Weekday(DateSerial(Year(I), 12, 25), vbMonday) - 28
    erste_Weihnachtstag = DateSerial(Year(I), 12, 25)
    zweiter_Weihnachtstag = DateSerial(Year(I), 12, 26)
    
    If I = Ostern Then GoTo Ende
    If I = Neujahr Then GoTo Ende
    If I = H3Könge Then GoTo Ende
    If I = Rosenmontag Then GoTo Ende
    If I = Karfreitag Then GoTo Ende
    If I = Ostermontag Then GoTo Ende
    If I = Christi_Himmelfahrt Then GoTo Ende
    If I = Pfingstmontag Then GoTo Ende
    If I = Fronleichnam Then GoTo Ende
    If I = Maifeiertag Then GoTo Ende
    If I = Nationalfeiertag Then GoTo Ende
    If I = Erntedankfest Then GoTo Ende
    If I = Reformationstag Then GoTo Ende
    If I = Allerheiligen Then GoTo Ende
    If I = Volkstrauertag Then GoTo Ende
    If I = Buss_und_Betag Then GoTo Ende
    If I = Totensonntag Then GoTo Ende
    If I = erste_Weihnachtstag Then GoTo Ende
    If I = zweiter_Weihnachtstag Then GoTo Ende
    
    If Weekday(I, vbMonday) > 5 Then GoTo Ende
    At = At + 1
    
Ende:
Next
MsgBox ("es sind " & At & " Arbeitstage")
End Sub 
     Code eingefügt mit Syntaxhighlighter 1.15



Gruß
Holger
Anzeige
AW: Datumsdifferenz ohne Sonn- und Feiertage
06.10.2003 01:26:13
GerdW
Das Goto schmerzt in den Augen!

Gerd
@ GerdW
06.10.2003 08:47:03
Panicman
Hallo Gerd,

schau doch nicht hin, oder schreib, wie du es besser machst.
Natürlich schmerzt GoTo in den Augen. Aber für ein "Then Next"
bin ich anscheinend zu blöd. Gibt nur 'ne Fehlermeldung.
Es ist aber immer wieder sehr motivierend solche Sprüche zu lesen,
ohne daraus etwas lernen zu können.

Gruß
Holger
2 Möglichkeiten ohne Goto
06.10.2003 10:02:47
Boris
Hi Holger,

1.)
Du fütterst in den einzelnen If-Abfragen eine Boolsche Variable (B). Nur wenn diese z.B. TRUE bleibt, dann am Ende: If B = True then At = At + 1 oder kürzer: If B then At = At + 1

2.)
Arbeite mit Select Case - alle If-Bedingungen als Case1:
Select Case I
Case Ostern, Neujahr, H3Könige....etc..etc.. - ohne irgendwas weiter
Case Else
At = At + 1
End Select

Grüße Boris
Anzeige
AW: @ GerdW
06.10.2003 10:48:01
PeterW
Hallo Holger,

eine andere Möglichkeit wäre, die Feiertage in ein Array einzulesen und in einer Schleife die Elemente des Arrays auf Übereinstimmung mit dem Datum zu prüfen:

bolfeiertag = False
For Count2 = 1 To 19
If I = arr(Count2) Then
bolfeiertag = True
Exit For
End If
Next

Noch ein Hinweis, ich würde nicht in jedem Durchlauf die Feiertage neu berechnen. Das ist doch nur nach einem Jahreswechsel, der natürlich auch abgefangen werden müsste, erforderlich.

Gruß
Peter
Danke euch Beiden...
06.10.2003 12:39:36
Panicman
Hallo Boris, Hallo Peter,

ich werde heute Abend mir mal gedanken machen, wie ich das am besten löse.
Auf jeden Fall kommt "GoTo" weg.
Ich wollte das Makro insoweit noch verändern, das die Bundesländer auch noch
berücksichtigt werden, und die Feiertage am Ende noch ausgegeben werden.

Da ich von Userforms im Moment noch gar keine Ahnung habe und ich das aber mal
lernen möchte, werde ich mir diese Aufgabe mal gönnen und versuchen ein "schnuckeliges"
Programm zu "bauen".
Das Fertige Programm werde ich vielleicht mal hier vorstellen, um es von euch Cracks noch verfeinern zu lassen.

Ihr habt mir jedenfalls sehr geholfen und nicht nur blöde Kommentare geschrieben.

Danke
Holger
Anzeige
AW: Danke euch Beiden...
06.10.2003 22:01:47
Det
Halle erst einmal

Ich möchte mich bei allen bedanken, die sich mit meinem Problem beschäftigt haben.
Getestet habe ich bislang nur die Variante von Holger, die wunderbar funktioniert.
Werde auch mal die Vorschläge von Boris und Peter versuchen umzusetzen.
Übrigens Holger, ich komme aus Berlin und musste daher "leider" eine Reihe von Feiertagen löschen.

Gruß Det
Bitteschön, hab gern geholfen !! o.T.
06.10.2003 22:06:00
Panicman

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige