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 ?
> 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
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