Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Datumsdifferenz berechnen und bestimmte Tage ausschliessen

196 views
Skip to first unread message

Reinhold

unread,
Nov 17, 2009, 4:08:02 AM11/17/09
to
Hallo zusammen,

ich habe eine Urlaubsdatei angelegt. in den Spalten A und B wird das von-bis
Datum des Urlaubs eingetragen und mit der Formel
Nettoarbeitstage(a2;b2;feiertage) die Differenz ermittelt.
Bei einer 5-Tage-Woche funktioniert dies auch. Ich bekomme es aber nicht
hin, wenn ein Mitarbeiter z.B. nur eine 3-Tage-Woche hat. Dann sollen die
beiden Nicht-Arbeitstage bei der Rechnung auch nicht berücksichtigt werden.
Kann mir jemnad helfen ?

Andreas Killer

unread,
Nov 17, 2009, 4:55:31 AM11/17/09
to
Reinhold schrieb:

> Nettoarbeitstage(a2;b2;feiertage) die Differenz ermittelt.
> Bei einer 5-Tage-Woche funktioniert dies auch. Ich bekomme es aber nicht
> hin, wenn ein Mitarbeiter z.B. nur eine 3-Tage-Woche hat. Dann sollen die
> beiden Nicht-Arbeitstage bei der Rechnung auch nicht berücksichtigt werden.

Nun ja, man müsste dann von NETTOARBEITSTAGE die Anzahl der
gewünschten Wochentage abziehen, die nicht in den Feiertagen vorkommen.

=Nettoarbeitstage(a2;b2;feiertage)-AnzahlTage(a2;b2;{5;6};feiertage)

als Beispiel für eine 3-Tage-Woche von Montag bis Mittwoch.

Der TageTyp kann diese Werte haben:

1 Sonntag
2 Montag
3 Dienstag
4 Mittwoch
5 Donnerstag
6 Freitag
7 Samstag

Der Code muss in ein normales Modul, wie's geht steht hier:
http://www.online-excel.de/excel/singsel_vba.php?f=44#s2

Andreas.

Function AnzahlTage(Ausgangsdatum, Enddatum, TageTyp, _
Optional Freie_Tage) As Long
'Zählt die Anzahl bestimmter Tage zwischen 2 Daten
Dim I As Date, CountIt As Boolean, R As Variant
'Teste alle Tage
For I = Ausgangsdatum To Enddatum
'Ist es dieser Wochentag?
If IsArray(TageTyp) Then
CountIt = False
For Each R In TageTyp
If Weekday(I, vbUseSystemDayOfWeek) = R Then
CountIt = True
Exit For
End If
Next
Else
CountIt = Weekday(I, vbUseSystemDayOfWeek) = TageTyp
End If

If CountIt Then
'Freie Tage angegeben?
If IsMissing(Freie_Tage) Then
'Nein, zählen
CountIt = True
Else
If IsArray(Freie_Tage) Then
'Teste alle freien Tage
CountIt = True
For Each R In Freie_Tage
'Ist der Tag in der Liste
If I = R Then
'Ja, nicht zählen
CountIt = False
Exit For
End If
Next
Else
CountIt = Freie_Tage <> I
End If
End If
'Soll gezählt werden?
If CountIt Then AnzahlTage = AnzahlTage + 1
End If
Next
End Function

Alexander Wolff

unread,
Nov 17, 2009, 6:44:56 AM11/17/09
to
Als <news:7D45DADC-98A2-43E5...@microsoft.com> ließ
Reinhold verlautbaren, evtl. nachfolgend zitiert:

http://excelformeln.de/formeln.html?welcher=11

Aus dem dortigen
=SUMMENPRODUKT((WOCHENTAG(ZEILE(INDIREKT(A1&":"&A2));2)<6)*1)-SUMMENPRODUKT((C1:C25>=A1)*(C1:C25<=A2)*(WOCHENTAG(C1:C25;2)<6))
(es werden 5 Wochentage gezählt)

wird abgewandelt dann z.B. folgendes:

=SUMMENPRODUKT((WOCHENTAG(ZEILE(INDIREKT(A1&":"&A2));2)<4)*1)-SUMMENPRODUKT((C1:C25>=A1)*(C1:C25<=A2)*(WOCHENTAG(C1:C25;2)<4))
(es werden Mo bis Mi gezählt)

In der letzteren Formel wird 2mal "<6" durch "<4" ersetzt.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2

0 new messages