أعتقد الحل رياضياتيا صحيح، فقط المشكلة أني لم احترز لوجود خلايا فاضية بناء على المثال في المرفق السابق.
لاحظ أجوبتك (مبهمة) غير صريحة!! يجب تحديد الخطأ بشكل واضح.
محاولة أخرى بدون تغيير في النتائج فقط تم تبديل نوع المتغيرات احترازا عند وجود خلايا فاضية في العطل/الإجازات.
Function Between(inDate As Long, Date1 As Long, Date2 As Long) As Boolean
Between = inDate >= Date1 And inDate <= Date2
End Function
Function getHolidays(Holiday1 As Long, Holiday2 As Long, _
Workday1 As Long, Workday2 As Long) As Integer
Dim Date1 As Long, Date2 As Long
'On Error Resume Next
'Min date is 31/12/1899
If Holiday1 <= 0 Or Holiday2 <= 0 Then Exit Function
If Between(Holiday1, Workday1, Workday2) Or _
Between(Holiday2, Workday1, Workday2) Or _
Between(Workday1, Holiday1, Holiday2) Or _
Between(Workday2, Holiday1, Holiday2) Then
Date1 = IIf(Holiday1 >= Workday1, Holiday1, Workday1)
Date2 = IIf(Holiday2 <= Workday2, Holiday2, Workday2)
getHolidays = Date2 - Date1 + 1
End If
End Function
حساب أيام العمل خلال_04.xlsm