إجمالي مرات مشاهدة الصفحة

الأحد، 1 مايو 2016

دالة الترتيب حسب درجات الطلاب Ordinal Number UDF Function

السلام عليكم ورحمة الله وبركاته

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

بفرض أن لديك مجموعة طلاب ولهم درجات في العمود الثالث في النطاق C2:C11 ، والمطلوب ترتيب الطلاب حسب الدرجات.

أولاً نقوم بتسمية نطاق الدرجات لتسهيل التعديل في المعادلة حسب ملفك ، نحدد النطاق C2:C11 ونضع مؤشر الماوس في صندوق الاسم على يسار شريط المعادلات ونكتب اسم للنطاق وليكن Marks ، حيث سنستخدم هذا الاسم في المعادلة.

قم بوضع الدالة المعرفة التالية في موديول عادي (للدخول لمحرر الأكواد اضغط Alt + F11 ، ومن قائمة Insert اختر الأمر Module ثم الصق الدالة المعرفة التالية) 

Function OrdinalNum(ByVal Num As Variant, Optional ByVal Sex As Byte = 0) As String
    Const Male = 0
    Const Female = 1
    Dim Sings(1 To 11) As String
    Dim Tens(2 To 10) As String
    Dim Fem As String

    On Error Resume Next

    OrdinalNum = Num
    Num = CDbl(Num)
    If Num < 1 Or Num > 100 Or Num <> CLng(Num) Then
        Exit Function
    End If

    Sings(1) = "الأول"
    Sings(2) = "الثاني"
    Sings(3) = "الثالث"
    Sings(4) = "الرابع"
    Sings(5) = "الخامس"
    Sings(6) = "السادس"
    Sings(7) = "السابع"
    Sings(8) = "الثامن"
    Sings(9) = "التاسع"
    Sings(10) = "العاشر"
    Sings(11) = "الحادي"

    Tens(2) = "العشرون"
    Tens(3) = "الثلاثون"
    Tens(4) = "الأربعون"
    Tens(5) = "الخمسون"
    Tens(6) = "الستون"
    Tens(7) = "السبعون"
    Tens(8) = "الثمانون"
    Tens(9) = "التسعون"
    Tens(10) = "المائة"

    If Sex > Female Then Sex = Male
    Fem = IIf(Sex = 0, "", "ة")

    Select Case Num
    Case 1: OrdinalNum = Sings(Num) & IIf(Sex = Male, "", "ى")
    Case 2 To 10: OrdinalNum = Sings(Num) & Fem
    Case 11: OrdinalNum = Sings(Num) & Fem & " عشر" & Fem
    Case 12 To 19: OrdinalNum = Sings(Num Mod 10) & Fem & " عشر" & Fem
    Case Else
        Select Case Num Mod 10
        Case 0: OrdinalNum = Tens(CLng(Num / 10))
        Case 1: OrdinalNum = Sings(11) & Fem & " و" & Tens(Fix(Num / 10))
        Case Else: OrdinalNum = Sings(Num Mod 10) & Fem & " و" & Tens(Fix(Num / 10))
        End Select
    End Select
End Function

الآن ننتقل لآخر جزئية وهي أننا سنقوم بوضع معادلة في الخلية D2 بهذا الشكل

=OrdinalNum(RANK(C2,Marks))

ثم نضع معادلة أخرى في الخلية D3 بهذا الشكل (وبعدها نسحب هذه المعادلة لنهاية النطاق أي إلى الخلية D11)

=IF(C3=C2,OrdinalNum(RANK(C3,Marks))&" مكرر",OrdinalNum(RANK(C3,Marks)))

إعداد / ياسر خليل أبو البراء

هناك 6 تعليقات:

  1. استاذ : ياسر
    هكذا يكون الشرح .. وياليت الجروب يلتزم وينتهج نهجك في الشرح والعرض
    حسن علي

    ردحذف
  2. أخي الغالي حسن علي
    شهادة أعتز بها منك ..بارك الله فيك وجزيت خيراً

    ردحذف
  3. أخي الكريم أسامة مشكور على مررك الطيب بالمدونة

    ردحذف
  4. بارك الله فيكم
    كفيت ووفيت

    ردحذف
  5. أخي الفاضل سمير بارك الله فيك ومشكور على مرورك العطر بالمدونة

    ردحذف