TOP

ساعات العمل

وصف

وفي هذه المقالة سنتناول كيفية حساب ساعات العمل بين تاريخين. قد تكون هذه المعلومات ضرورية لتحليل كفاءة عمل الموظفين ولحساب الوقت المفيد الذي يقضيه في حالة نظام الدفع بالقطعة.

لذا، دعونا نكتب دالتنا الخاصة لمساعدتنا في حساب ساعات العمل ونطلق عليها اسم WORKHOURS.

افتح القائمة الخدمة - ماكرو - المحرر Visual Basic , أدخل الوحدة الجديدة (قائمة طعام Insert - Module) وانسخ نص هذه الوظيفة هناك:

Function WORKHOURS(StartDate As Variant, EndDate As Variant)
    Application.Volatile
    StartDate = StartDate.Address
    EndDate   = EndDate.Address
    
    ' ساعات العمل في اليوم الأول 
    WORKHOURS1 = Evaluate("IF(AND(DAY(" & StartDate & ")=DAY(" & _
    EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & "))," & EndDate & _
    "-" & StartDate & "-IF(AND(HOUR(" & StartDate & ")<=13,HOUR(" & EndDate & _
    ")>=14),1/24,0),18/24-MOD(" & StartDate & ",1)-IF(HOUR(" & StartDate & _
    ")<=13,1/24,0))")
    
    ' ساعات العمل في الأيام المتوسطة 
    WORKHOURS2 = Evaluate("MAX((IF(AND((WEEKDAY(" & EndDate & ",2))"&"<"&"(WEEKDAY(" & StartDate & _
    ",2)),((WEEKDAY(" & StartDate & ",2))-(WEEKDAY(" & EndDate & ",2)))>1),(((DATEDIF(" & StartDate & _
    "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & StartDate & "," & EndDate & _
    "," & """D""" & ")+1)/7,1)*2)-2),(((DATEDIF(" & StartDate & "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & _
    StartDate & "," & EndDate & "," & """D""" & ")+1)/7,1)*2)))-2),0)*8/24")
    
    ' ساعات العمل في اليوم الأخير 
    WORKHOURS3 = Evaluate("IF(AND(DAY(" & StartDate & _
    ")=DAY(" & EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & ")),0,MOD(" & EndDate & _
    ",1)-9/24-IF(HOUR(" & EndDate & ")>=14,1/24,0))")
    
    WORKHOURS = WORKHOURS1 + WORKHOURS2 + WORKHOURS3
End Function

أغلق محرر Visual Basic ثم عد إلى Excel.

في هذه اللحظة سادة الوظيفة في هذه الفئة تعريف المستخدم يمكنك العثور على وظيفة WORKHOURS الخاصة بنا واستخدامها. بناء جملة الوظيفة التالي:

 =WORKHOURS(start_date; end_date)