وفي هذه المقالة سنتناول كيفية حساب ساعات العمل بين تاريخين. قد تكون هذه المعلومات ضرورية لتحليل كفاءة عمل الموظفين ولحساب الوقت المفيد الذي يقضيه في حالة نظام الدفع بالقطعة.
لذا، دعونا نكتب دالتنا الخاصة لمساعدتنا في حساب ساعات العمل ونطلق عليها اسم WORKHOURS.
افتح القائمة الخدمة - ماكرو - المحرر Visual Basic , أدخل الوحدة الجديدة (قائمة طعام
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)