اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

  • أفضل إجابة
قام بنشر

يمكنك استعمال هذه المعادلة للتوصل لتاريخ النهاية بعد 100 يوم عمل

=WORKDAY.INTL($C$5-1,100,7)

وهذه الدالة للإصدارات الأحدث (2010 وما بعدها) تراعي خيارات عطلة نهاية الاسبوع

ورقم 7 يعني الجمعة والسبت

ويمكن استخدام هذه الدالة للاصدارات الاقدم (2007 وما قبلها)

=WORKDAY($c$5,100)-1

هذه الدالة تحسب عدد الأيام على ان اجازة نهاية الاسبوع هي السبت والاحد

لذلك تم انقاص يوم من الناتج لتحسب على ان عطلة نهاية الاسبوع الجمعة والسبت 

ملحوظة:

وتم تعديل الملف المرفق ليحسب عدد أيام العمل بين تاريخين

للإصدارات القديمة بدالة networkdays والحديثة networkdays.intl

بالتوفيق

 

ايام عمل.xlsx

  • Like 2
قام بنشر (معدل)

السلام عليكم 
بعد اذن استاذنا الكبير محمد صالح حل اخر يمكن استخدام هذه المعادلة     NETWORKDAYS.INTL(C4;C4+D4;7)

حيث c4 هى تاريخ البداية

و D4 عدد ايام العمل 

ورقم 7 المقصود به العطلة الاسبوعيه الجمعة والسبت ويمكن تغييره حسب العطله الاسبوعبه
 

ايام عمل.xlsx

تم تعديل بواسطه أحمد حليم
  • Like 1
قام بنشر (معدل)
11 ساعات مضت, أ / محمد صالح said:

ويمكن استخدام هذه الدالة (الاصدار الاقدم)

=WORKDAY(C5,100)-1

هذه الدالة تحسب عدد الأيام على ان اجازة نهاية الاسبوع هي السبت والاحد

لذلك تم انقاص يوم من الناتج لتحسب على ان عطلة نهاية الاسبوع الجمعة والسبت

معالجة خاطئة، وقد عملت مقارنة لسنة كاملة وأظهرت خطأ المعالجة.

يبقى دالتي لمن يستعملون نسخ قديمة من الاكسل
أو
دالة WORKDAY.INTL للإصدارات الحديثة، لم أجربها لأن نسخة الاكسل عندي قديمة
ويمكن كذلك استخدام دالتي.

 

ايام عمل_05.xlsm

تم تعديل بواسطه AbuuAhmed
تبديل المرفق
قام بنشر
14 ساعات مضت, هاوي اكسل said:

ريد ان اجمع ايام العمل فقط بدون الجمعة والسبت على تاريخ معين

ياريت توضح لنا أي دالة استخدمت.
وإذا كانت الدالة WORKDAY.INTL فهل يمكنك إضافتها لمرفقي (بعد ترفية الملف طبعا) بإضافة عمود جديد للسنة كاملة ثم رفع الملف.
أحتاج للمقارنة ضروري.

قام بنشر
3 دقائق مضت, هاوي اكسل said:

جميع الملفات صحيحة

حياك الله يا هاوي اكسل
سألتك عن الدوال، فالملفات/المرفقات تحتوي على أربع دوال وهي:
WORKDAY
WORKDAY.INTL
NETWORKDAYS.INTL
MyWorkDay
فأيهم اخترت؟

قام بنشر
12 دقائق مضت, هاوي اكسل said:

NETWORKDAYS.INTL

اخترت هذه

ممتاز، هذه الدالة جلبها الزميل أحمد حليم وهي لا تلبي طلبك لأن هذه الدالة تحسب لك الأيام وليس تاريخ النهاية، فهي تحتاج تاريخين البداية والنهاية ومعرف العطلة الأسبوعية.
أما طلبك فهو عملية عكسية لهذه الدالة فيبقى عندك ثلاث فقط من أصل أربع دوال.

  • Like 1
قام بنشر

انا قمت بتجربة الدالة NETWORKDAYS.INTL   على اكثر من تاريخ مع عدد مختلف لايام العمل قبل طرحها تحسبا للاخطاء  وكانت النتيائج  كلها صحيحة 

 اخى AbuuAhmed هل قمت بتجربتها واعطت نتائج خاطئة

 

قام بنشر (معدل)
1 ساعه مضت, أحمد حليم said:

هل قمت بتجربتها واعطت نتائج خاطئة 

نعم عزيزي، أنت فهمت المطلوب بشكل مقلوب.  المطلوب هو تاريخ نهاية العمل، هو معطيك تاريخ البداية ويحتاج إضافة 100 يوم عمل صافي يعني بدون العطل الأسبوعية.
الدالة المعنية تعطي صافي أيام عمل محصورة بين تاريخين.

تم تعديل بواسطه AbuuAhmed
  • Like 1
قام بنشر
10 ساعات مضت, AbuuAhmed said:

نعم عزيزي، أنت فهمت المطلوب بشكل مقلوب.  المطلوب هو تاريخ نهاية العمل، هو معطيك تاريخ البداية ويحتاج إضافة 100 يوم عمل صافي يعني بدون العطل الأسبوعية.
الدالة المعنية تعطي صافي أيام عمل محصورة بين تاريخين.

اعتقد فى المطلوب انه ذكر ذلك (اريد ان اجمع ايام العمل فقط بدون الجمعة والسبت على تاريخ معين)

وشكرا على تنبيهى استاذنا الفاضل AbuuAhmed

  • Like 1
قام بنشر

اضطررت أن أرسل ملفي إلى صديق ليحوله إلى إصدار أعلى لأرى نتائج الدوال الأخرى.
يكفي التركيز على أول سجلين، أشبعوها فحصا وتأكدوا من تطبيق المعادلات بشكل صحيح حتى لا نظلم نتائجها.
أرجو الاهتمام بالموضوع بشكل علمي وبعيدا عن المجاملات وحساب الخواطر 🙂.

وهذه دعوة للجميع وليس لمن شاركوا في هذا الموضوع فقط.

ايام عمل_06.xlsm

قام بنشر
11 ساعات مضت, AbuuAhmed said:

معالجة خاطئة، وقد عملت مقارنة لسنة كاملة وأظهرت خطأ المعالجة.

أعتذر المعالجة سليمة واتضحت بعد التعديل على دالتي، والتعديل كان بحذف أيام العطلة الأسبوعية في نهاية المدة.
فاستخدام الدالة بهذه الصورة:
 

= WORKDAY(C5,100) - 1

سليما.

الدالة بعد التعديل:
 

Function myWorkDay(FmDate As Date, NetDays1 As Integer) As Date
    'WORKDAY شبيهة بدالة الاكسل
    'FmDate أول يوم عمل
    Dim Weekends As Integer
    Dim ToDate As Date
    Dim NetDays2 As Integer
    Dim LoopRepeat As Integer
    
    Weekends = Int(NetDays1 / 2.5)
    ToDate = FmDate + NetDays1 + Weekends - 1
    
    Weekends = CountWkDay(FmDate, ToDate, vbFriday) + _
               CountWkDay(FmDate, ToDate, vbSaturday)
    NetDays2 = ToDate - FmDate - Weekends + 1
    
    Do While NetDays1 <> NetDays2
        LoopRepeat = LoopRepeat + 1
        If LoopRepeat = 10 Then
            'Debug.Print "LoopRepeat", LoopRepeat
            Exit Do
        End If
        
        If NetDays1 > NetDays2 Then
            NetDays2 = NetDays2 + 1
        Else
            NetDays2 = NetDays2 - 1
        End If
    
        ToDate = FmDate + NetDays2 + Weekends - 1
        Weekends = CountWkDay(FmDate, ToDate, vbFriday) + _
                   CountWkDay(FmDate, ToDate, vbSaturday)
        NetDays2 = ToDate - FmDate - Weekends + 1
    Loop
    
    If Weekday(ToDate) >= vbFriday Then ToDate = ToDate - 1
    If Weekday(ToDate) >= vbFriday Then ToDate = ToDate - 1
    
    myWorkDay = ToDate
End Function

وعليه لا حاجة لمستخدمي الاكسل لدالتي، وتبقى مطلوبة لمستخدمي الأكسس.

يبقى فحص دالة واحدة فقط. 

  • Like 1
قام بنشر
10 ساعات مضت, AbuuAhmed said:

أعتذر المعالجة سليمة

المعالجة يعني (التحايل) في استخدامها وإلا الاستخدام المعياري الصحيح لها مختلف. يلزم الانتباه.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information