Anzeige
Archiv - Navigation
924to928
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
924to928
924to928
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro Funktion für Arbeitstage auch rückwärts

Makro Funktion für Arbeitstage auch rückwärts
15.11.2007 14:23:00
Pascal
Hallo zusammen,
ich habe ein Makro von Thomas Ramel gefunden, das Arbeitstage auch im Makro mit Feiertagen berechnet.
Leider funktioniert dies nur wenn ich einen Arbeitstag x habe und y Tage hinzuzähle.
Ich habe jetzt vielfach versucht das Makro umzubauen, so dass es auch funktioniert, wenn y negativ ist. (Negative Schleife etc.) Leider bin ich immer wieder gescheitert. Habt Ihr eine Idee?
Hier der Originalcode: und der Link auf meine Musterdatei mit dem Makro. https://www.herber.de/bbs/user/47743.xls
Danke für etwaige Tipps,
Pascal

Public Function ARBEITSTAGE(Ausgangsdatum As Date, _
Tage As Integer, _
Optional Feiertage As Range, _
Optional Wochentage As Byte = 5) As Date
'© t.ramel@mvps.org, 22.07.2005
'ermittelt das Ende der Zeitspanne mit Arbeitstagen analog
'der Funktion ARBEITSTAG(), jedoch mit variabler Wochenlänge
'Parameter sind die folgenden:
'Ausgangsdatum:   Eine Datumsangabe oder ein Zellbezug
'Tage         :   Anzahl Arbeitstabe bis zum Ende des Zeitraums
'Feiertage    :   Ein Bezug auf einen Range oder einen benannten
'                 Bereich mit den Datusm-Angaben zu den Feiertagen
'Wochentag    :   Eine Zahl von 1-7, welche die Anzahl Arbeitstage
'                 pro Woche angibt (beginnend mit Montag)
Dim Enddatum        As Date
Dim Datum           As Date
Dim Tag             As Range
Dim i               As Integer
If Wochentage  7 Then
ARBEITSTAGE = CVErr(xlErrValue)
Exit Function
End If
'Enddatum bestimmen für den Schleifendurchlauf
Enddatum = Ausgangsdatum + Tage
'äussere Schleife zur Prüfung der Wochentage
For Datum = Ausgangsdatum + 1 To Enddatum
If WorksheetFunction.Weekday(Datum, 2) > Wochentage Then
'Zählvariable erhöhen wenn Wochentag grösser als gewünscht
i = i + 1
'innere Schleife zur Prüfung der Feiertage
ElseIf Not Feiertage Is Nothing Then
'Versionsabfrage, da .Find in xl2000 nicht funktioniert
If Val(Application.Version)  0 Then   'Wenn Zählvariable erhöht wurde
'rekursiver Aufruf der Funkton für die Untersuchung des verlängerten Zeitraumes
Enddatum = ARBEITSTAGE(Enddatum, i, Feiertage, Wochentage)
End If
ARBEITSTAGE = Enddatum
End Function


2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Funktion für Arbeitstage auch rückwärts
15.11.2007 15:53:00
Pascal
Hi,
hmm. da kommt ja nix, schade.
ich habe jetzt mal einen eigenen Code zusammengestümpert, der funktioniert jetzt sowohl vor- als auch rückwärts. wenn auch noch ohne Feiertage:
Schöne Grüße,
Pascal

Public Function Arbeitstage(Ausgangsdatum As Date, Tage As Integer)
Dim Enddatum As Date
Dim Datum As Date
Dim Tag As Range
Dim i, j As Integer
If Tage > 0 Then
For j = 1 To Tage
If WorksheetFunction.Weekday(Ausgangsdatum + j, 1) = 1 Then i = i + 1
If WorksheetFunction.Weekday(Ausgangsdatum + j, 1) = 7 Then i = i + 1
'Prüfung Feiertag fehlt noch
Next j
Enddatum = Ausgangsdatum + Tage + i
Arbeitstage = Enddatum
If WorksheetFunction.Weekday(Arbeitstage, 1) = 7 Then Arbeitstage = Arbeitstage + 2
If WorksheetFunction.Weekday(Arbeitstage, 1) = 1 Then Arbeitstage = Arbeitstage + 1
Else:
For j = -1 To Tage Step -1
If WorksheetFunction.Weekday(Ausgangsdatum + j, 1) = 1 Then i = i + 1
If WorksheetFunction.Weekday(Ausgangsdatum + j, 1) = 7 Then i = i + 1
'Prüfung Feiertag
Next
Enddatum = Ausgangsdatum + Tage - i
Arbeitstage = Enddatum
If WorksheetFunction.Weekday(Arbeitstage, 1) = 1 Then Arbeitstage = Arbeitstage - 1
If WorksheetFunction.Weekday(Arbeitstage, 1) = 7 Then Arbeitstage = Arbeitstage - 1
End If
End Function


Anzeige
AW: Makro Funktion für Arbeitstage auch rückwärts
15.11.2007 20:22:04
Erich
Hallo Pascal,
falls du hier noch mal hinschaust, noch ein Vorschlag:

Function Arbeitstage(datA As Date, intT As Integer)
Dim intV As Integer, ii As Integer, jj As Integer
intV = IIf(intT > 0, 1, -1)
While ii 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige