اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

دالة معرفة لاستخراج مواد الرسوب


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

بسم الله الرحمن الرحيم

 

للتسهيل في استخراج مواد الرسوب للطلبة تم عمل هذه الدالة لاستخراج المواد الراسب فيها او متغيب

يشترط وجود صف الدرجة العظمى ودرجة النجاح

نضع هذا الكود في موديول

Function ASEEL(x As Range)
    Dim D As String
    For Each Rng In x
        If Rng = "" Then GoTo 1
        If Rng < Cells(5, Rng.Column) Or Rng = "غ" Then
            D = " (" & Cells(3, Rng.Column).Text & ")" & D
        End If
1   Next
    If D <> "" Then
        ASEEL = D
    Else
        ASEEL = "ناجح ومنقول"
    End If
End Function

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

=ASEEL(D6:J6)

وشكرا

 

دالة معرفة لاستخراج مواد الرسوب.rar

  • Like 7
رابط هذا التعليق
شارك

بارك الله فيك أخي الحبيب ياسر العربي

نشاط ملحوظ ورائع .. لا حرمنا الله من روائعك وأعمالك المميزة

 

دالة مفيدة جداً وستفيد الكثيرين من العاملين بالتربية والتعليم

تقبل وافر تقديري واحترامي

 

  • Like 1
رابط هذا التعليق
شارك

بارك الله فيك اخي ياسر ابو البراء

نشاطكم هو الملحوظ دائما وما نحن الا ومضة في اعمالكم ومساعداتكم

جزيت خيرا 

تقبل تحياتي

 

  • Like 3
رابط هذا التعليق
شارك

الله  الله  عليك يا ابو العربى

المصطبة فيها شغل جامد اهوه   ربنا يجعلها مصطبة خير دايما :clapping:

  • Like 2
رابط هذا التعليق
شارك

6 ساعات مضت, مختار حسين محمود said:

الله  الله  عليك يا ابو العربى

المصطبة فيها شغل جامد اهوه   ربنا يجعلها مصطبة خير دايما :clapping:

مشكور استاذنا الغالي مختار         اللهم امين

جزاك الله كل خير

تفبل تحياتي

 

رابط هذا التعليق
شارك

شكرا للاستاذ المتميز ياسر العربي

عندما مسحت احدى خلايا الدرجه الصغرى لاحد المواد ظلت في الملاحظات ان الطالب عنده نفس الماده كرسوب

 

 

 

 

========

في مثل الصفحه المرفقه من المحترم ياسر العربي يوجد اعمده اخرى مثل درجه الاختبار واعمال السنه

يجب عندما نمسح الدرجه الصغرى للماده .. يجب ان لايعمل الكود مع الدرجه الموجوده في مثل هذا العمود الممسوح درجه النهايه الصغرى له

 

رابط هذا التعليق
شارك

اخي الكريم بن بنها تفضل المرفق وبه تعديل لتستجيب الدالة لاي تغيير على الدرجة الصغرى 

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

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

وان شاء الله نجد له حل

تقبل تحياتي

اسماء المواد الراسب فيها دالة معرفة.rar

  • Like 2
رابط هذا التعليق
شارك

بارك الله فيك أخي الغالي ياسر العربي ...

لي اقتراحين اسمح لي بمناقشتهما معك

الاقتراح الأول استخدام الجملة التالية

Application.Volatile

وذلك ليتم تحديث نتائج الدالة بمجرد حدوث تغير في الخلايا المرتبطة بالخلية التي بها نتائج مواد الرسوب وتوضع في أول الدالة بعد جملة الإعلان

 

الاقتراح الثاني وهو الأهم أن تقوم بحذف السطر التالي

If Rng = "" Then GoTo 1

لا أدري ما الفائدة منه .. وكذلك الرقم 1 ..

هذا السطر يؤدي إلى تخطي الخلايا الفارغة ومن ثم يحسب الطالب ناجح رغم أن الخلية فارغة وليس بها درجات ..من ثم وجب حذف السطر والرقم 1 الملتصق بجملة Next ..

تقبل تحياتي

 

رابط هذا التعليق
شارك

اخي الغالي ابو البراء تسلم على لمساتك

اما بالنسبة لتخطى الخلايا الفارغة كنت اعتقد انه من الافضل اعتبار الخلايا الفارغة لا تحتسب رسوب لانها لم يتم وضع الدرجة بعد

ولكن بعد ردك ولفت الانتباه لها اتضح انه من الافضل ان يتم احتسابها ضمن الرسوب للفت النظر لها اثناء ملئ البيانات

Function ASEEL(X As Range, Y As Range, Z As Range)
    Dim D As String
    Application.Volatile
    For Each Rng In X
        If Rng < Cells(Y.Row, Rng.Column) Or Rng = "غ" Then
            D = " (" & Cells(Z.Row, Rng.Column).Text & ")" & D
        End If
    Next
    If D <> "" Then
        ASEEL = D
    Else
        ASEEL = "ناجح ومنقول"
    End If
End Function

مشكور على الاضافة

تقبل تحياتي

  • Like 1
رابط هذا التعليق
شارك

ع الأصل دور : دا المثل الشائع ، وإنت يا غالي صاحب الدالة المعرفة وصاحب الإبداع

وما اقترحته مجرد ومضة بسيطة لا تذكر بجانب موضوعك الرائع والجميل

ويكفي أنك تفيد الآخرين وتقدم لهم كل ما هو جديد ومفيد ...

 

تقبل وافر تقديري واحترامي

  • Like 1
رابط هذا التعليق
شارك

اسمها هنخش (ممكن حد يعكس حروفها ويقراها غلط يا Farmer) .. اسمها هندخل ..

أكيد هندخل دي هتفكرك بليلة الدخلة

تقبل وافر حبي واعتزازي ... مع تحيات كريازي (إذا كنت تدعم توشيبا فنحن ندعم كريازي)

  • Like 2
رابط هذا التعليق
شارك

بتغلط ماشي اعملها بكود هي كمان بقي واستخدم  الCHR فيها كمان

وبعدين انت مش عايش في البلد كل المصطلحات دي اتغيرت خلاص

يعني كلمة هنخش دي بتدرس يامعلم

وحياتك لاعملك مصفوفة (تهزيق) هدية ليك اصبر عليا :Rules: 

مع تحيات

العربي صناع الثقة

  • Like 1
رابط هذا التعليق
شارك

تفضل اخي الكريم ابن بنها الدالة المعرفة وجدت انها لن تصلح لمثل هذه البيانات

فكتبت لك هذا الكود لعله يفي بالغرض مع العلم اني كتبت كود اخر لنفس الملف الذي ارفقته منذ فترة

ولكن هذا الكود افضل  نوعا ما من السابق

تفضل الكود

Sub YASSER_ELARABY()
'YASSER_ELARABY
    Dim ARR
    Dim ARRY
    Dim ARRYS
    Dim ALL_LESS As String
    Const STATUS As Byte = 101 'عمود الحالة ناجح او دور ثان
    Const NOTES As Byte = 102  ' عمود الملاحظات عمود المواد او منقول للصف ا لاخر
    Const GENDER As Byte = 112  ' عمود الجنس ذكر او انثى
    '_____________________________________________________
    Const LESS_ROW As Byte = 6  'صف الدرجة الصغرى
    Const NAM_ROW As Byte = 2    'صف اسماء المواد
    Const NAME_FIRST As Byte = 7  ' اول صف لاسماء الطلاب
    Const NAME_LAST As Long = 206 + NAME_FIRST  ' عدد الطلاب
    '_____________________________________________________
    ARR = Array(9, 18, 27, 36, 46, 52, 54, 59, 64, 69, 78)  ' اعمدة اختبار الفصل الدارسي الثاني  لجميع المواد
    ARRY = Array(13, 22, 31, 40, 51, 52, 57, 62, 67, 72, 82)  'اعمدة الدرجة النهائية لجميع المواد
    ARRYS = Array(5, 14, 23, 32, 41, 52, 53, 58, 63, 68, 74)  'اعمدة اسماء كل المواد
    '_____________________________________________________
    For R = NAME_FIRST To NAME_LAST
        For X = 0 To UBound(ARR)
            On Error Resume Next
            If ARR(X) = 46 Then
                If Val(Cells(R, ARR(X))) + Val(Cells(R, ARR(X) + 1)) < Val(Cells(LESS_ROW, ARR(X))) Or Cells(R, ARR(X)) = "غ" Or Cells(R, ARR(X) + 1) = "غ" Then
                    ALL_LESS = ALL_LESS & Cells(NAM_ROW, ARRYS(X)) & " - "
                    GoTo 86
                Else
                    GoTo 86
                End If
            End If
            If Cells(R, ARR(X)) < Cells(LESS_ROW, ARR(X)) Or Cells(R, ARR(X)) = "غ" _
               Or Cells(R, ARRY(X)) < Cells(LESS_ROW, ARRY(X)) Or Cells(R, ARRY(X)) = "غ" Then
                ALL_LESS = ALL_LESS & Cells(NAM_ROW, ARRYS(X)) & " - "
            End If
86      Next X
    '_____________________________________________________

        If ALL_LESS = "" Then
            If Cells(R, GENDER) = 1 Then Cells(R, STATUS) = "ناجح "
            If Cells(R, GENDER) = 2 Then Cells(R, STATUS) = "ناجحة "
            If Cells(R, GENDER) = 1 Then Cells(R, 102) = "ومنقول " & INFO.Range("B14")
            If Cells(R, GENDER) = 2 Then Cells(R, 102) = "ومنقولة " & INFO.Range("B14")
        ElseIf ALL_LESS <> "" Then
            If Cells(R, GENDER) = 1 Then Cells(R, STATUS) = "له دور ثان في"
            If Cells(R, GENDER) = 2 Then Cells(R, STATUS) = "لها دور ثان في"
            Cells(R, 102) = Left(ALL_LESS, Len(ALL_LESS) - 2)
            ALL_LESS = Empty
        End If
    Next R
    
End Sub

مرفق الملف

 

استخراج مواد الرسوب للمحترم ياسر العربي.rar

  • Like 2
رابط هذا التعليق
شارك

شرح مبسط لطريقة عمل الكود

Sub YASSER_ELARABY()
'YASSER_ELARABY
    Dim ARR
    Dim ARRY
    Dim ARRYS

    Dim R As Long
    Dim X As Long
    Dim ALL_LESS As String

    Const STATUS As Byte = 101    'عمود الحالة ناجح او دور ثان
    Const NOTES As Byte = 102  ' عمود الملاحظات عمود المواد او منقول للصف ا لاخر
    Const GENDER As Byte = 112  ' عمود الجنس ذكر او انثى
    '_____________________________________________________
    Const LESS_ROW As Byte = 6  'صف الدرجة الصغرى
    Const NAM_ROW As Byte = 2    'صف اسماء المواد
    Const NAME_FIRST As Byte = 7  ' اول صف لاسماء الطلاب
    Const NAME_LAST As Long = 206 + NAME_FIRST  ' عدد الطلاب
    '_____________________________________________________
    ARR = Array(9, 18, 27, 36, 46, 52, 54, 59, 64, 69, 78)  ' اعمدة اختبار الفصل الدارسي الثاني  لجميع المواد
    ARRY = Array(13, 22, 31, 40, 51, 52, 57, 62, 67, 72, 82)  'اعمدة الدرجة النهائية لجميع المواد
    ARRYS = Array(5, 14, 23, 32, 41, 52, 53, 58, 63, 68, 74)  'اعمدة اسماء كل المواد
    '_____________________________________________________
    With Sheet2    'اسم شيت البيانات
        For R = NAME_FIRST To NAME_LAST    ' حلقة تكرارية تبدأ  بأول اسم طالب الى اخر اسم
            For X = 0 To UBound(ARR)    ' حلقة تكرارية تبدأ من الصفر الى اقصى مصفوفة اعمدة اختبار الفصل الدارسي الثاني
                On Error Resume Next
                Application.ScreenUpdating = False    'الغاء تحديث الشاشة
                'هذا الجزء خاص بمادة العلوم تحديدا الفصل الدراسي الثاني لانه مقسم على عمودين فتم اضافة هذا الجزء ليتم معالجة هذه المرحلة
                If ARR(X) = 46 Then
                    'لايوجد اختلاف بين هذا الكود وبين الكود الموجود بالاسفل
                    If Val(.Cells(R, ARR(X))) + Val(.Cells(R, ARR(X) + 1)) < Val(.Cells(LESS_ROW, ARR(X))) Or .Cells(R, ARR(X)) = "غ" Or .Cells(R, ARR(X) + 1) = "غ" Then
                        ALL_LESS = ALL_LESS & .Cells(NAM_ROW, ARRYS(X)) & " - "
                        GoTo 86  'هنا يتم تخطى عمل الكود بالاسفل حتى لايتم معالجة مادة العلوم مرة اخرى
                    Else
                        GoTo 86  'وهنا ايضا يتم تخطى مادة العلوم الى المادة الاخرى
                    End If
                End If
                'هنا يتم مقارنة المواد بالدرجة الصغرى الخاصة الفصل الدارسي الثاني في اول الكود او اذا كانت غياب يتم اضافة اسم المادة من صف  المواد الى المتغير
                'ALL_LESS
                'او  مقارنة الدرجة النهائية لكل مادة بالدرجة الصغرى لها او اذا كانت غياب اذا تحقق الشرط فيتم اضافة المادة الى المتغير
                'ALL_LESS
                If .Cells(R, ARR(X)) < .Cells(LESS_ROW, ARR(X)) Or .Cells(R, ARR(X)) = "غ" _
                   Or .Cells(R, ARRY(X)) < .Cells(LESS_ROW, ARRY(X)) Or .Cells(R, ARRY(X)) = "غ" Then
                    ALL_LESS = ALL_LESS & .Cells(NAM_ROW, ARRYS(X)) & " - "
                End If
                '
86          Next X    'الذهاب الى المادة الاخرى لاعادة تطبيق الكود مرة اخرى حتى انتهاء جميع المواد
            '_____________________________________________________
            'هنا بعد اكتمال الكود يتم عمل شرط للمتغير
            'ALL_LESS
            'اذا كان المتغير فارغ اي لم يتم اضافة اي مواد به اذا الطالب ناجح
            If ALL_LESS = "" Then
                If .Cells(R, GENDER) = 1 Then .Cells(R, STATUS) = "ناجح "    'اذا كان نوع الطالب ذكر يتم وضع ناجح
                If .Cells(R, GENDER) = 2 Then .Cells(R, STATUS) = "ناجحة "    'اذا كانت انثى يتم وضع ناجحه
                If .Cells(R, GENDER) = 1 Then .Cells(R, NOTES) = "ومنقول " & INFO.Range("B14")    'ويتم وضع في الملاحظات منقول الى ويتم جلب الصف من صفحة الانفو
                If .Cells(R, GENDER) = 2 Then .Cells(R, NOTES) = "ومنقولة " & INFO.Range("B14")    'مثل ماسبق
                'اما اذا كان المتغير يحمل اي بيانات لمواد يصبح الطالب له دور ثان
            ElseIf ALL_LESS <> "" Then
                If .Cells(R, GENDER) = 1 Then .Cells(R, STATUS) = "له دور ثان في"    'مثل ما سبق بخصوص النوع
                If .Cells(R, GENDER) = 2 Then .Cells(R, STATUS) = "لها دور ثان في"    '
                .Cells(R, NOTES) = Left(ALL_LESS, Len(ALL_LESS) - 2)    'هنا يتم وضع قيمة المتغير اي المواد في خلية الملاحظات
                ALL_LESS = Empty    'تفريغ المتغير لاعادة تعبئة اسم طالب اخر
            End If
        Next R    'الذهاب الى الصف التالي حتى انتهاء عدد الطلاب
    End With
    Application.ScreenUpdating = True    'اعادة تحديث الشاشة
End Sub

الكود به بعض التعديلات البسيطة

  • Like 2
رابط هذا التعليق
شارك

تعديل بسيط بالكود ليتماشى مع نظام المدارس اكثر

Sub YASSER_ELARABY()
'YASSER_ELARABY
    Dim ARR
    Dim ARRY
    Dim ARRYS
    '___________________________________________
    Dim R As Long
    Dim X As Long
    Dim XX As Byte
    Dim ALL_LESS As String
    '___________________________________________
    Const STATUS As Byte = 101    'عمود الحالة ناجح او دور ثان
    Const NOTES As Byte = 102  ' عمود الملاحظات عمود المواد او منقول للصف ا لاخر
    Const GENDER As Byte = 112  ' عمود الجنس ذكر او انثى
    '_____________________________________________________
    Const LESS_ROW As Byte = 6  'صف الدرجة الصغرى
    Const NAM_ROW As Byte = 2    'صف اسماء المواد
    Const NAME_FIRST As Byte = 7  ' اول صف لاسماء الطلاب
    Const NAME_LAST As Long = 206 + NAME_FIRST  ' عدد الطلاب
    '_____________________________________________________
    ARR = Array(9, 18, 27, 36, 46, 52, 54, 59, 64, 69, 78)  ' اعمدة اختبار الفصل الدارسي الثاني  لجميع المواد
    ARRY = Array(13, 22, 31, 40, 51, 52, 57, 62, 67, 72, 82)  'اعمدة الدرجة النهائية لجميع المواد
    ARRYS = Array(5, 14, 23, 32, 41, 52, 53, 58, 63, 68, 74)  'اعمدة اسماء كل المواد
    '_____________________________________________________
    With Sheet2    'اسم شيت البيانات
        Application.ScreenUpdating = False    'الغاء تحديث الشاشة
        Application.Calculation = xlManual    ' ايقاف الحساب التلقائي
        For R = NAME_FIRST To NAME_LAST    ' حلقة تكرارية تبدأ  بأول اسم طالب الى اخر اسم
            For X = 0 To UBound(ARR)    ' حلقة تكرارية تبدأ من الصفر الى اقصى مصفوفة اعمدة اختبار الفصل الدارسي الثاني
                On Error Resume Next
                '____________________________________________________
                'يتم حساب عدد ا لمواد المتغيب بها الطالب او درجتها صفر ويتم وضع عدد المواد في المتغير اكس اكس
                'اذا وصل عدد المواد الى 11 اصبح الطالب متغيب
                If .Cells(R, ARRY(X)) = 0 Or .Cells(R, ARRY(X)) = "غ" Then
                    XX = XX + 1
                End If
                '____________________________________________________
                'هذا الجزء خاص بمادة العلوم تحديدا الفصل الدراسي الثاني لانه مقسم على عمودين فتم اضافة هذا الجزء ليتم معالجة هذه المرحلة
                If ARR(X) = 46 Then
                    'لايوجد اختلاف بين هذا الكود وبين الكود الموجود بالاسفل
                    If Val(.Cells(R, ARR(X))) + Val(.Cells(R, ARR(X) + 1)) < Val(.Cells(LESS_ROW, ARR(X))) Or .Cells(R, ARR(X)) = "غ" Or .Cells(R, ARR(X) + 1) = "غ" Then
                        ALL_LESS = ALL_LESS & .Cells(NAM_ROW, ARRYS(X)) & " لثلث الدرجة " & " - ": GoTo 86
                        GoTo 86  'هنا يتم تخطى عمل الكود بالاسفل حتى لايتم معالجة مادة العلوم مرة اخرى
                    Else
                        GoTo 86  'وهنا ايضا يتم تخطى مادة العلوم الى المادة الاخرى
                    End If
                End If
                'هنا يتم مقارنة المواد بالدرجة الصغرى الخاصة الفصل الدارسي الثاني في اول الكود او اذا كانت غياب يتم اضافة اسم المادة من صف  المواد الى المتغير
                'ALL_LESS
                'او  مقارنة الدرجة النهائية لكل مادة بالدرجة الصغرى لها او اذا كانت غياب اذا تحقق الشرط فيتم اضافة المادة الى المتغير
                'ALL_LESS
                '______________________________________________________
                If .Cells(R, ARR(X)) < .Cells(LESS_ROW, ARR(X)) Or .Cells(R, ARR(X)) = "غ" Then
                    ALL_LESS = ALL_LESS & .Cells(NAM_ROW, ARRYS(X)) & " لثلث الدرجة " & " - ": GoTo 86
                End If
                If .Cells(R, ARRY(X)) < .Cells(LESS_ROW, ARRY(X)) Or .Cells(R, ARRY(X)) = "غ" Then
                    ALL_LESS = ALL_LESS & .Cells(NAM_ROW, ARRYS(X)) & " - "
                End If
                '______________________________________________________
86          Next X    'الذهاب الى المادة الاخرى لاعادة تطبيق الكود مرة اخرى حتى انتهاء جميع المواد

            'اذا كان المتغير اكس اكس بيساوي عدد المواد اذن الطالب متغيب
            If XX = 11 Then ALL_LESS = "غياب  ": XX = 0
            '_____________________________________________________
            'هنا بعد اكتمال الكود يتم عمل شرط للمتغير
            'ALL_LESS
            'اذا كان المتغير فارغ اي لم يتم اضافة اي مواد به اذا الطالب ناجح
            If ALL_LESS = "" Then
                If .Cells(R, GENDER) = 1 Then .Cells(R, STATUS) = "ناجح "    'اذا كان نوع الطالب ذكر يتم وضع ناجح
                If .Cells(R, GENDER) = 2 Then .Cells(R, STATUS) = "ناجحة "    'اذا كانت انثى يتم وضع ناجحه
                If .Cells(R, GENDER) = 1 Then .Cells(R, NOTES) = "ومنقول " & INFO.Range("B14")    'ويتم وضع في الملاحظات منقول الى ويتم جلب الصف من صفحة الانفو
                If .Cells(R, GENDER) = 2 Then .Cells(R, NOTES) = "ومنقولة " & INFO.Range("B14")    'مثل ماسبق
                'اما اذا كان المتغير يحمل اي بيانات لمواد يصبح الطالب له دور ثان
            ElseIf ALL_LESS <> "" Then
                If .Cells(R, GENDER) = 1 Then .Cells(R, STATUS) = "له دور ثان في"    'مثل ما سبق بخصوص النوع
                If .Cells(R, GENDER) = 2 Then .Cells(R, STATUS) = "لها دور ثان في"    '
                .Cells(R, NOTES) = Left(ALL_LESS, Len(ALL_LESS) - 2)    'هنا يتم وضع قيمة المتغير اي المواد في خلية الملاحظات
                ALL_LESS = Empty    'تفريغ المتغير لاعادة تعبئة اسم طالب اخر
            End If
            '_____________________________________________________
        Next R    'الذهاب الى الصف التالي حتى انتهاء عدد الطلاب
    End With
    Application.ScreenUpdating = True    'اعادة تحديث الشاشة
    Application.Calculation = xlAutomatic    'تشغيل الحساب التلقائي
End Sub

 

استخراج حالة الطالب ومواد الرسوب.rar

رابط هذا التعليق
شارك

206 عدد الطلاب الموجودة بالكشف يعني لو عدد الطلاب اصبح 350 طالب نكتب مكان ال206   نكتب 350

ولكن رأيت ان من الافضل ان تكون صفحة بيانات المدرسة هي الاساس في  بعض البيانات

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

كما بالمرفق

 

استخراج حالة الطالب ومواد الرسوب معدل YASSER.rar

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
×
×
  • اضف...

Important Information