أكاديمية الصقر للتدريب

لوحة التميز الأسبوعي
العضو المتميز المشرف المتميز المراقب المتميز المدير المتميز الموضوع المتميز القسم المتميز
العضو المتميز المشرف المتميز المراقب المتميز المدير المتميز الموضوع المتميز القسم المتميز
ashraf_hertlion hassona229-- لا تميز خلال هذه الفترة YasserKhalil مطلوب تعديل الكود للطباعة اكسيل اسئله واجابات


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





الحلقة التاسعة الدالتين IF و Select Case

السلام عليكم ورحمة الله وبركاته ونكمل حلقات الأستاذ الكبير ياسر خليل فى الـVBA الحلقة التاسعة .......................... ..



28-03-2018 11:22 مساء
Eslam Abdullah
مشرف على لغات برمجة آخرى
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 03-10-2017
رقم العضوية : 852
المشاركات : 1580
الدولة : مصر
الجنس : ذكر
تاريخ الميلاد : 1-9-1995
الدعوات : 5
يتابعهم : 0
يتابعونه : 90
قوة السمعة : 10845
موقعي : زيارة موقعي
عدد الإجابات: 6
 offline 

السلام عليكم ورحمة الله وبركاته
ونكمل حلقات الأستاذ الكبير
ياسر خليل فى الـVBA
الحلقة التاسعة

...................................................................................................................
النهاردة هنضرب 3 أشباح بحجر واحد (نشتغل قناصة) ، يعني الحلقة دي هنتكلم عن 3 أمور ..

هنراجع على كيفية بناء دالة
(هنأكد عليها بمثالين) ، ومن خلال المثالين (الشبحين) هنتعلم إزاي نتعامل مع الشروط .. يبقا مراجعة + معلومتين !

حلقة النهاردة مفيهاش كلام كتير ، بس موعدكمش إنتو عارفين طبعي بحب الرغي! معظمها هتكون عملي .. لنبدأ الحلقة على بركة الله

الشكل العام لـ IF الشرطية .. عندنا 4 أشكال :


الشكل الأول والثاني : لو هنتعامل مع شرط واحد وكل اللي يهمنا إن الشرط يتحقق ، مثال :
If 100 > 90 Then MsgBox "The number 100 is greater than 90"


الجملة لازم تبدأ بـ IF وبعديها جملة الشرط ، جملة الشرط هنا 100 أكبر من 90 (واحد هيقولي مش دي علامة أصغر من ..هقوله متنساش إننا بنكتب من الشمال لليمين ، والعلامة ممكن تقراها حسب الاتجاه ، بالعامية كدا إحنا قرينا رقم 100 مثلا هنلاقي الفتحة نحية الرقم 100 يبقا كدا نقراها أكبر من ) عارف إنها معلومة بسيطة بس فيه ناس ممكن يحصل عندها Confusion.

الشرط اللي بنكتبه بيكون نتيجته حاجة من اتنين يا أبيض يا إسود (يا إما True يا إما False) ، لو كانت نتيجة الشرط True صحيحة بالمعنى البلدي يبقا اللي جاي هيتم تنفيذه ، أما لو كانت False المحرر مش هيعبر الجملة اللي ورا كلمة Then وهيعديها ، ويقول للسطر اللي بعد Then (عدي يا كود مفيش منك مصلحة) rolleyes

نجرب نغير علامة أكبر من إلى أصغر من ، ونشوف النتيجة ، مفيش تنفيذ لسطر الكود لأن الشرط لم يتحقق !!

لاحظنا إننا كتبنا كله في سطر واحد .. ممكن اللي فات يتكتب في 3 أسطر في الحالة دي هيكون بالشكل ده

If 100 > 90 Then
MsgBox "The number 100 is greater than 90"
End If


والسطر المراد تنفيذه في حالة تحقق الشرط (بقول تاني في حالة تحقق الشرط) دا السطر التاني ، طيب والسطر التالت ده جه منين (دا القفلة زي ما اتعودنا قفلة جملة If بتكون جملة End If ، ولاحظوا إننا في الشكل الأول مستعملناش القفلة لأننا كتبناها في سطر واحد فقط .. 

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

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

    If 100 > 90 Then
        MsgBox "The number 100 is greater than 90"
    Else
        MsgBox "The number 100 is less than 90"
    End If


محدش سألني لحد دلوقتي إزاي بيتم تنسيق الكود بهذا الشكل؟

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

If 100 > 90 Then
MsgBox "The number 100 is greater than 90"
Else
MsgBox "The number 100 is less than 90"
End If


طبعا الفرق واضح .. والفرق يوضح أكتر لما تتعامل مع أسطر كثيرة من الأكواد ..

اتعملت إزاي ؟ عن طريق الضغط على المفتاح tab بعد ما أضع المؤشر في أول السطر

المهم مش هنتكلم عن البداية ولا النهاية لجملة If ، إحنا بس هنركز على جملة Else ، هي دي اللي بتفصل بين السطر المراد تنفيذه إذا تحقق الشرط ، والسطر المراد تنفيذه إذا لم يتحقق الشرط ..

السطر اللي قبل Esle دا ليه الأولوية طبعاً بس في حالة تحقق الشرط ، أما السطر اللي بعديها بيكون في حالة عدم تحقق الشرط ..أظن كدا واضحة (عمال أقول الكلام بأكتر من أسلوب وأكتر من مرة ، لأن في الإعاة إفادة)  1


نجرب الكود مرة بالشكل اللي فات ، ونغير علامة أكبر من إلى علامة أصغر من ونجرب مرة تانية ونلاحظ الرسالة (أقصد مدى تحقق الشرط)


الشكل الرابع والأخير لـ IF دا بقا اللي تقدر من خلاله تضع شروط كتيرة زي ما إنت عايز (خد راحتك ..حط شروطك يا كبير ، والمحرر ينفذ)


هنا المثال هو أفضل شرح ، هنكتب دالة Function وهنستخدم فيها IF مع الشكل الرابع ؛ لأننا عندنا شروط كتير ..

الجماعة اللي بيشتغلوا في المدارس (ربنا يبارك فيهم) ، بيعملوا معادلة لتحديد المستوى أو التقدير (وشروطهم بتكون بالشكل
ده :

لو الطالب غ يبقا الناتج غ (حد عنده اعتراض) .. لو درجة الطالب ما بين 0 و 49 يبقا تقديره دون المستوى .. ولو الطالب درجته ما بين 50 و 64 يبقا مقبول .. ولو الطالب درجته ما بين 65 و 74 يبقا تقديره جيد .. ولو الطالب درجته ما بين 75 و 84 يبقا تقديره جيد جداً .. ولو الطالب درجته ما بين 85 و 100 يبقا ممتاز (شفتوا الشروط ..حاجة كدا تحس إنها متشابكة) ..

بالمعادلات ممكن نعملها بالشكل ده :

=IF(A1="","",IF(A1="غ","غ",IF(AND(A1>=0,A1<50),"دون المستوى",IF(AND(A1>=50,A1<65),"مقبول",IF(AND(A1>=65,A1<75),"جيد",IF(AND(A1>=75,A1<85),"جيد جداً",IF(AND(A1>=85,A1<=100),"ممتاز","")))))))

هي دي المعادلة اللي هتأدي الغرض وتحقق المطلوب .. بس تعرفوا إن طول المعادلة بالشكل ده 188 حرف (الحرف مقصود بيه الحروف والرموز) .. طبعاً المعادلة ممكن نحولها لدالة تحقق لنا المطلوب ، خلينا نشوف ونجرب
Function Grade(Mark As Variant) As String
    If IsEmpty(Mark) Then
            Grade = ""
        ElseIf Mark = "غ" Then
            Grade = "غ"
        ElseIf Mark >= 0 And Mark < 50 Then
            Grade = "دون المستوى"
        ElseIf Mark >= 50 And Mark < 65 Then
            Grade = "مقبول"
        ElseIf Mark >= 65 And Mark < 75 Then
            Grade = "جيد"
        ElseIf Mark >= 75 And Mark < 85 Then
            Grade = "جيد جداً"
        ElseIf Mark >= 85 And Mark <= 100 Then
            Grade = "ممتاز"
    End If
End Function



اتعرفنا قبل كدا على كيفية بناء الدالة ، ودا مثال تاني لتأكيد التعامل مع بناء الدوال :

بدأنا بكلمة Function لأننا بنتعامل مع دالة وليس إجراء فرعي ، متبوعة باسم الدالة (والتسمية قلنا إنت حر فيها مثلا هنسميها Grade) ، طيب إحنا لما نتعامل مع الدالة دي ، نشوف الدالة دي هتتعامل مع ايه ؟؟ الدالة هتتعامل مع درجة الطالب ، فنسمي المتغير الخاص بالدالة Mark ،والدرجة دي قد تكون أرقام من 0 إلى 100 وقد تكون حروف (غ) بالتالي نخلي نوعها Variant لأن النوع ده من المتغيرات Variables بيتعامل مع أي حاجة ، فهنا هيتعامل مع أرقام ونصوص ، طيب والناتج المفروض هيكون عبارة عن نص ، فدا نخليه String وممكن نخليه Variant بس إحنا عايزين الناتج نص وبس (دون المستوى - مقبول - جيد - جيد جداً - ممتاز - غ - فراغ "")

أعتقد إن الصورة واضحة ، هنا استخدمنا جملة ElseIf مش Else لأننا بنتعامل مع شروط متعددة ، ممكن نفضل نستخدمها لحد آخر شرط ، وممكن قبل الشرط الأخير نستبدلها بـ Else
(إنت وراحتك)

بعد كل كلمة ElseIf وضعنا شرط وفي آخر الشرط مننساش كلمة Then

لما يكون فيه أكتر من شرط في نفس الوقت (بمعنى شرطين واجب تحققهم في نفس ذات الوقت بنستخدم المعامل Operator اللي اسمه And)

بمعنى آخر للي ميعرفش المعامل And (لما نستخدم المعامل ده يبقا الشرطين لازم نتيجتهم تكون True عشان ينفذ السطر اللي وراه)

----------------

ناخد مثال فرعي عشان نفهم And :

X = 10: Y = 20
If X = 10 And Y = 20 Then MsgBox "X = 10" & vbCrLf & "Y =20"


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

معلومة إضافية لعمل سطر جديد في الرسالة نستخدم كلمة vbCrLf أو فيه كلمة أسهل منها بتؤدي نفس الوظيفة اسمها vbNewLine ..

ونلاحظ بردو في الرسالة إننا استخدمنا المعامل &  ودا بيستتخدم لربط أو دمج النصوص .. (أعتذر عن الخروج عن الموضوع الأصلي)

----------------

يرجع مرجعونا للدالة الخاصة بالتقدير :

وضعنا الشروط ، وكلما تحقق شرط معين يتم وضع قيمة نصية لاسم الدالة : فلو تحقق الشرط مثلاً إن الدرجة ما بين 50 و 64 ، بنقول ساعتها إن الدالة اللي سميناها Grade ساعتها تحمل القيمة النصية "مقبول" ، ووضعنا النصوص بين أقواس تنصيص كما تعودنا .. يبقا في الحالة دي لو درجة الطالب 55 يبقا التقدير "مقبول" (اللهم اجعلنا من المقبولين)

..

لتطبيق الدالة : اكتب القيم التالية في النطاق A1:A13

0    49    50    55   65    66   74     75    84     85    90    100   غ

في الخلية B1 اكتب المعادلة :

=Grade(A1)


ونسحب المعادلة لحد بعد آخر النطاق ، يعني خلي المعادلة لحد A15 مثلاً عشان نشوف لما تكون الخلية فارغة ايه اللي هيحصل ..

شوفوا بقا الفرق ما بين المعادلة اللي حطينها في الأول اللي طولها 188 حرف والمعادلة دي ، دي طولها يدوب 9 حروف بس (ادعوا لي !)


** ملحوظة : يا ريت لما نيجي نحط شروط ، نخلي شرط فراغ الخلية يكون في الأول (لأني جربت في دالة أخلي شرط الفراغ في الآخر بيعمل شوية كعبلة ، ودا سببه إننا لو حطينا الشرط مثلا الدرجة ما بين 0 و 49 .. الأول هيتم التعامل مع الخلايا الفارغة إنها صفر وليست خلايا فارغة)

المهم عشان ميحصلش توهااااااان خليكوا تكتبوا شرط الفراغ في أول الشروط (اللي عايز يجرب يحط الشرط ده في الآخر يجرب ويشوف الكعبلة بنفسه)

Function Grade(Mark As Variant) As String
    If Mark = "غ" Then
            Grade = "غ"
        ElseIf Mark >= 0 And Mark < 50 Then
            Grade = "دون المستوى"
        ElseIf Mark >= 50 And Mark < 65 Then
            Grade = "مقبول"
        ElseIf Mark >= 65 And Mark < 75 Then
            Grade = "جيد"
        ElseIf Mark >= 75 And Mark < 85 Then
            Grade = "جيد جداً"
        ElseIf Mark >= 85 And Mark <= 100 Then
            Grade = "ممتاز"
        ElseIf IsEmpty(Mark) Then
            Grade = ""
    End If
End Function


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

المشكلة بتحصل لأن منطق الترتيب في الشروط موجود ، بمعنى آخر إنه ماشي شرط شرط ، وأول ما شرط يتحقق ينتهي تنفيذه للدالة ، فلو وضعنا شرط الدرجة ما بين صفر و49 .. أول ما يلاقي خليه فاضية هيعاملها على إنها صفر وليست فارغة لأننا وضعنا شرط الفراغ في نهاية الدالة ، فنلاقي ناتج المعادلة مع الخلايا الفارغة (دون المستوى) .. انتهت الملحوظة (أنا عارف إن فيه ناس هتدعي عليا بسبب الملحوظة اللي متعتبرش ملحوظة دي .. دي درس جوا درس)@

آخر نقطة نتكلم فيها جملة IsEmpty (ودي دالة مدمجة في محرر الأكواد لاختبار الفراغ :: هل الخلية دي فارغة أم لا ؟؟) ، وممكن نستغنى عنها ونقول :

If Mark = "" Then
            Grade = ""


نرجع للصح ونخلي شرط الفراغ في أول الدالة ..أظن بإذن الله كدا الأمور بقت واضحة تماماً...

ننتقل لمثال آخر وأخير عشان أنا تعبت لكم صراحة :

نفس المثال ولكن بصورة أخرى ..

هنعمل دالة ، هنغير اسمها بس عشان نطبقها في نفس الملف اللي إحنا شغالين عليه .. هنسميها Level

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

الجملة اسمها Select Case وبييجي وراها المتغير اللي هنشتغل عليه (اللي هو في الحالة دي Mark درجة الطالب)

وبعدين نبدأ نضع حالات الشرط بكلمة Case متبوعة بالشرط بس بشكل مختلف شوية

وقبل آخر شرط ممكن نستخدم Case Else وممكن نستغنى عنها (مش هتفرق) ، وفي النهاية مننساش القفلة يا عبد المولى (End Select) ..

Function Level(Mark As Variant) As String
    Select Case Mark
        Case ""
            Level = ""
        Case 0 To 49
            Level = "دون المستوى"
        Case 50 To 64
            Level = "مقبول"
        Case 65 To 74
            Level = "جيد"
        Case 75 To 84
            Level = "جيد جداً"
        Case 85 To 100
            Level = "ممتاز"
        Case "غ"
            Level = "غ"
    End Select
End Function

لتطبيق الدالة نروح للخلية C1 في ورقة العمل ونضع المعادلة بهذا الشكل ، ونسحبها لحد A15 مثلا ، عشان نقارن النتائج :
=Level(A1)


مش هشرح تفاصيلها ؛ لأنها واضحة وضوح الشمس في عز الليل ..(شكلي هنجت ...!!) .. (حد يضغط F5 عشان يعملي ريفرش .. الطالب المنتبه هيقولي كدا غلط لو ضغطنا هنا F5 ، وإحنا جوا محرر الأكواد كدا هينفذ أمر مش هيعمل ريفرش)

بكدا نكون انتهينا من شبحين من أهم أشباح عالم الأكواد (شبح If وشبح Select Case) ، وكمان شبح (بناء الدالة UDF)

أستودعكم الله ، أترككم في رعاية الله ..


كان معكم القناص أبو البراء (صائد الأشباح) من قلعة الرعب أكاديمية الصقر





















29-03-2018 12:37 مساء
مشاهدة مشاركة منفردة [1]
Yasser Elaraby
المشرف العام
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 21-08-2017
رقم العضوية : 1
المشاركات : 1293
الجنس : ذكر
الدعوات : 13
يتابعهم : 2
يتابعونه : 724
قوة السمعة : 9894
موقعي : زيارة موقعي
عدد الإجابات: 9
 offline 
look/images/icons/i1.gif الحلقة التاسعة الدالتين IF و Select Case
جزيتم خيرا اخي اسلام وجزاه الله خيرا اخي الحبيب ابو البراء
142

توقيع :Yasser Elaraby
663013020


29-03-2018 03:54 مساء
مشاهدة مشاركة منفردة [2]
محمد حسن المحمد
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 24-08-2017
رقم العضوية : 80
المشاركات : 723
الجنس : ذكر
تاريخ الميلاد : 14-5-1965
الدعوات : 2
يتابعهم : 69
يتابعونه : 32
قوة السمعة : 4115
عدد الإجابات: 4
 offline 
look/images/icons/i1.gif الحلقة التاسعة الدالتين IF و Select Case
السلام عليكم ورحمة الله وبركاته
جزاكم الله خيراً أخي الكريم إسلام على هذا المجهود الرائع 
والأروع من ذلك ضرب الأشباح لأننا بتنا نكره هذه الحروف الثلاثة مجتمعة(
mad_1) كيفما جمعت
شرح وافٍ ومستفيض ومبسط مع الإشارة إلى مواطن الجمال والضرورة بكتابة الكود على هذا النسق الرائع

تقبل تحياتي العطرة والسلام عليكم
142




توقيع :محمد حسن المحمد

الرفقُ ما كان في شيءٍ إلاَّ زانهُ ، وما نُزع من شيءٍ إلاَّ شانُه ،اللينُ في الخطاب ، البسمةُ الرائقةُ على المحيا، 
الكلمةُ الطيبةُ عند اللقاء ، هذه حُلَلٌ منسوجةٌ يرتديها السعداء


29-03-2018 04:47 مساء
مشاهدة مشاركة منفردة [3]
Eslam Abdullah
مشرف على لغات برمجة آخرى
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 03-10-2017
رقم العضوية : 852
المشاركات : 1580
الدولة : مصر
الجنس : ذكر
تاريخ الميلاد : 1-9-1995
الدعوات : 5
يتابعهم : 0
يتابعونه : 90
قوة السمعة : 10845
موقعي : زيارة موقعي
عدد الإجابات: 6
 offline 
look/images/icons/i1.gif الحلقة التاسعة الدالتين IF و Select Case
مشكرور لمروركم أساتذتى الأفاضل أستاذ ياسر وأستاذ محمد
تقبلوا وافر احترامى وتقديرى 81

30-03-2018 02:27 مساء
مشاهدة مشاركة منفردة [4]
ahmed kroos
عضو نشيط
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 23-03-2018
رقم العضوية : 5108
المشاركات : 86
الجنس : ذكر
تاريخ الميلاد : 5-1-1992
الدعوات : 2
يتابعهم : 6
يتابعونه : 6
قوة السمعة : 205
 offline 
look/images/icons/i1.gif الحلقة التاسعة الدالتين IF و Select Case
جزاك الله كل خير استاذ اسلام 

31-03-2018 12:35 مساء
مشاهدة مشاركة منفردة [5]
YasserKhalil
مراقب عام
معلومات الكاتب ▼
تاريخ الإنضمام : 21-08-2017
رقم العضوية : 3
المشاركات : 10455
الجنس : ذكر
تاريخ الميلاد : 1-10-1978
الدعوات : 24
يتابعهم : 1
يتابعونه : 536
قوة السمعة : 36622
عدد الإجابات: 255
 offline 
look/images/icons/i1.gif الحلقة التاسعة الدالتين IF و Select Case
بارك الله فيك أخي العزيز إسلام ومشكور على مجهودك الرائع في نقل الموضوعات ليستفيد منها إخواننا الكرام

جزيتم خيراً إخواني وأحبابي في الله ومشكور على كلماتكم الطيبة ودعائكم الطيب المبارك
تقبلوا وافر محبتي وتقديري

31-03-2018 12:36 مساء
مشاهدة مشاركة منفردة [6]
Mohamed Abdullah
عضو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 05-12-2017
رقم العضوية : 2149
المشاركات : 25
الدولة : مصر
الجنس : ذكر
تاريخ الميلاد : 28-10-1999
يتابعهم : 4
يتابعونه : 11
قوة السمعة : 222
موقعي : زيارة موقعي
 offline 
look/images/icons/i1.gif الحلقة التاسعة الدالتين IF و Select Case
جزاك الله كل خير استاذ اسلام 


 





الكلمات الدلالية
الحلقة ، التاسعة ، الدالة ، Select ، Case ،


 










اخلاء مسئولية: يخلى منتدى أكاديمية الصقر للتدريب مسئوليته عن اى مواضيع او مشاركات تندرج داخل الموقع ويحثكم على التواصل معنا ان كانت هناك اى إنتهاكات تتضمن اى انتهاك لحقوق الملكية الفكرية او الادبية لاى جهة - بالتواصل معنا من خلال نموذج مراسلة الإدارة .وسيتم اتخاذ الاجراءات اللازمة.
سياسة النشر: التعليقات المنشورة لا تعبر عن رأي منتدى أكاديمية الصقر للتدريب ولا نتحمل أي مسؤولية قانونية حيال ذلك ويتحمل كاتبها مسؤولية النشر.

الساعة الآن 11:50 مساء