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



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





الحلقة الرابعة عشر الحلقات التكرارية

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



02-08-2018 01:54 صباحا
Eslam Abdullah
menu_open
مشرف على لغات برمجة آخرى
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 03-10-2017
رقم العضوية : 852
المشاركات : 1150
الجنس : ذكر
تاريخ الميلاد : 1-9-1995
الدعوات : 2
يتابعهم : 3
يتابعونه : 55
قوة السمعة : 6888
الاعجاب : 1942
 offline 

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

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

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


هنتكلم عن الحلقات (بس مش حلقات افتح الباب) الحلقات اللي هنتكلم عنها الحلقات التكرارية ، ومن اسمها هي عبارة عن حلقات بتتكرر (إضافة عظيمة!) wink_3

اسمها بالإنجليزي Loops ودي مهمة جداً في عالم الأكواد ، محدش يقدر يستغنى عنها تقريباً ..

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

من أول طالب إلى آخر طالب
      قووووول اسمك يا حبيبي
الطالب التالي

هو دا شكل الحلقة التكرارية .. نبرمجها بلغة الـ VBA ...

هنقول إن الفصل فيه 60 طالب
(معلش دا واقع الفصول في مصر) .. نقطة مهمة مننساش إن الطالب متغير مش ثابت ، فنرمز للطالب المتغير بالرمز X مثلاً ...​
Sub Loops()
    Dim X As Long
    For X = 1 To 60
        'Say your name
    Next X
End Sub

طبعاً الكود دا شوية له علاقة بالبرمجة وشوية هتش .. ايه اللي هنعمله ..زي ما اتعودنا (دايما) إننا نعرف المتغير .. ونركز في السطر الثاني بدأ بكلمة For  متبوعة باسم المتغير اللي هو X وبعدين علامة يساوي عشان نحدد قيمة X المتغيرة (أو الطالب المتغير) وهنا القيمة ليها بداية وليها نهاية (كل شيء له بداية ونهاية) وبيفصل بين البداية والنهاية حرف الجر To

وفي آخر الحلقة التكرارية جملة Next X وممكن نقول Next ونسكت ، ومحرر الأكواد هيفهم لوحده .. بس أنا تقليدي شويتين فخلينا نكتب المتغير ، عشان الكود ممكن يكون فيه أكتر من حلقة تكرارية ..

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


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

 

ناخد أول مثال بجد 1 عشان نقدر نتعلم إزاي نستفيد من الحلقات التكرارية ::

لنفترض أننا عايزين نرقم النطاق A1:A10 بالأرقام من 1 إلى 10يعني الخلية A1 = 1  والخلية A2=2 وهكذا ..طبعا الموضوع بسيط جدا

Sub NumberRange()
    Range("A1").Value = 1
    Range("A2").Value = 2
    Range("A3").Value = 3
    Range("A4").Value = 4
    Range("A5").Value = 5
    Range("A6").Value = 6
    Range("A7").Value = 7
    Range("A8").Value = 8
    Range("A9").Value = 9
    Range("A10").Value = 10
End Sub

كود في منتهى الروعة .. شايف حسام بيضحك ويقولي عايزك ترقم النطاق من A1:A100 (وابتسم ابتسامة فيها شماته !!) rolleyes mad_1

نفكر شوية .. بقول نفكر شوية
(بلاش تكمل الحلقة غير لما تبص في الكود وتفكر شوية .. فكر شوية واكسب التوفير في الوقت والجهد)

ايه المشترك في أسطر الكود .. وايه المختلف .. المتشابه في كل الأسطر
Range("A ").Value =

والمختلف هو الرقم بعد حرف الـ A ، والقيمة اللي بعد علامة يساوي ..

في السطر الأول الرقم اللي بعد حرف الـ A هو 1 ، والقيمة بعد علامة يساوي بردو 1 ، ونفس الكلام مع السطر رقم 2 ، ورقم 3 وهكذا

يبقا أول حاجة تفكر فيها إنك المختلف أو المتغير أو الشيء الغير ثابت تضعه في متغير ، ودا لأنه مش ثابت ومتغير .. فنضع متغير باسم X مثلاً

ونعمل حلقة تكرارية من 1 إلى 10 (دي القيم اللي هيحملها المتغير)

Sub NumberRange()
    Dim X As Long
    For X = 1 To 10
        Range("A" & X).Value = X
    Next X
End Sub

نفس الكود اللي شرحناه من شوية ، الاختلاف في السطر اللي بين سطري التكرار .. الحلقة هتدور 10 مرات ، وفي كل مرة المتغير X بيحمل قيمة مختلفة (نرررررركز في الجزئية اللي جاية لأنها مهمة جداً جداً )

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

ضع مؤشر الماوس في أي مكان في الكود .. جميل >> اضغط F8 من لوحة المفاتيح ، وجمد قلبك وقول يا رب .. لاحظت ايه يا عبد المحسن؟

عبد المحسن ناااااااام مني (الله يسامحك) ..عبد المحسن : شايف الدنيا صفرا ليه ، هو فيه عاصفة النهاردة كمان؟ .. رديت عليه : لا يا عبد المحسن كمل نومك ، السطر الأصفر اللي ظهر ده سببه إننا ضغطنا F8 .. ودا فايدته إننا هنقوم بعملية التنفيذ واحدة واحدة .. سطر سطر ..

السطر الأصفر على أول سطر في الكود

Sub NumberRange()

اضغط F8 مرة تانية ، ايه اللي حصل انتقل السطر الأصفر للسطر التالت ، طيب والسطر التاني يا معلم .. ملوش لازمة !!!

أكبر خطأ إنك تعتقد إنه ملوش لازمة ، لما ضغطنا F8 للمرة التانية ، محرر الأكواد خزن في الذاكرة كل المتغيرات الموجودة في الكود

عايز تتأكد من كلامي ، حرك مؤشر الماوس اللي على شكل حرف I
(فيه شرطة فوق وشرطة تحت) حرك الماوس من غير ما تدوس كليك .. واقف على المتغير X هتلاقي تلميح في مستطيل صغير بيقولك المتغير X=0 ، دي كدا القيمة المبدئية للمتغير ...

لما تضغط F8 للمرة التالتة ، روح شوف قيمة X مرة تانية هتلاقي قيمة X=1 (ايه اللي خلاها 1 مش كانت صفر من لحظة )

اللي حصل إننا انتقلنا من السطر

For X = 1 To 10

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

حرك مؤشر الماوس من غير ما تدوس على المتغير X في السطر المظلل بالأصفر

Range("A" & X).Value = X

هنلاقي زي ما قلت إن X =1

يعني محرر الأكواد هيعمل ايه دلوقتي ، هيشيل كل X ويحط مكانه القيمة 1 ، فيصبح السطر في الذاكرة بهذا الشكل

Range("A1").Value = 1

لحد كدا تمام التمام ، صغر محرر الأكواد بحيث تكون ورقة العمل ظاهرة بالنسبة لك واتأكد إن النطاق A1:A10 فارغ ليس به أي بيانات ، وركز في ورقة العمل ، واضغط F8 عشان تنقل السطر الأصفر إلى هذا السطر ، ولاحظ ورقة العمل
Next X

لاحظت يا منصور الخلية A1 وضعت فيها القيمة 1 ، نخلي بالنا إن السطر الأصفر بيتم تنفيذه بعد الخروج منه ، فلما خرجنا من السطر تم تنفيذ الأمر وأعطى القيمة 1 للخلية A1 ..

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

أما سطر الأمر والسطر اللي فيه كلمة Next بيبدل السطر الأصفر عليهم... نبص دلوقتي على قيمة المتغير X هنلاقيها بقت 2 فيتم تنفيذ السطر بمجرد الضغط على F8 ويضع القيمة 2 في الخلية A2 وهكذا ..جرب واضغط F8 وفي كل مرة شوف قيمة المتغير X وشوف النطاق A1:A10 في كل مرة

أول ما توصل قيمة المتغير X إلى الرقم 10 تتوقف الحلقة التكرارية ، وينتقل السطر الأصفر لجملة End Sub .. وينتهي عمل الكود ..​

عارف إني طولت في النقطة اللي فاتت ، بس كان لازم أطول فيها ، عشان أنا فاضي ومفيش ورايا شغل ، فقلت أصدعكم شوية yes


ننتقل لمثال آخر
---------------

عشان نقدر نفهم إزاي نستفيد من الحلقات التكرارية .. عايزين نعد الاسم (اسلام) في النطاق A1:A10

نفترض إني عندي الأسماء دي في النطاق A1:A10

اسلام
ياسر
عماد
حسام
عيسى
اسلام
اسلام
خليل
عبدالله
اسلام

المطلوب : نشوف الاسم (اسلام) كم مرة تم تكراره .. المعطيات : استعن بالله ثم بالحلقة التكرارية ..

الفكرة : هنعمل اختبار صغير بقاعدة IF وهنقول لو قيمة الخلية بتساوي "اسلام" .. زود المتغير Counter بقيمة واحد

Sub CountName()
    Dim X As Long
    Dim Counter As Long
    For X = 1 To 10
        If Range("A" & X).Value = "اسلام" Then Counter = Counter + 1
    Next X
    MsgBox Counter
End Sub

عملنا متغير جديد باسم Counter عشان لما يتحقق الشرط ويلاقي الاسم "أحمد" يقوم يخلي المتغير Counter يساوي نفسه + 1

طيب ليه يساوي نفسه ، عشان في كل مرة يلاقي أحمد قيمته هتتغير فلازم نضيف واحد لكل Counter جديد

النتيجة في الآخر هتظهر في رسالة ، وهي 4 ..

طيب نجرب نشيل الواحد في هذا السطر

Counter = Counter + 1

لو شيلنا الواحد هتكون النتيجة 0 ، لأن المتغير قيمته المبدئية صفر ، فلما يتحقق الشرط مش هيزيد المتغير إلا لما نضيف واحد في كل مرة يتحقق الشرط.

هناخد مثال آخر
----------------

عندنا درجات في النطاق A6:A15  ، عايزين نكتب ناجح أوراسب في الخلية المجاورة للدرجة ، لو الدرجة أكبر من أو يساوي 50 يبقا ناجح ، مكانش يكون راسب ...

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

58
41
88
40
50
40
98
94
60
35


نجرب الكود التالي ..
Sub LoopsTest()
    Dim X As Long
    For X = 6 To 15
        If Cells(X, 1).Value >= 50 Then
            Cells(X, 2).Value = "ناجح"
        Else
            Cells(X, 2).Value = "راسب"
        End If
    Next X
End Sub

نلاحظ الحلقة التكرارية بدأت من 6 إلى 15 (ودا متغير للصفوف من الصف رقم 6 إلى الصف رقم 15)

ووضعنا الشرط بين سطري الحلقة التكرارية ، لو الخلية اللي في الصف X والعمود الأول أكبر من أو يساوي 50 يقوم يعمل ايه؟

يضع القيمة النصية "ناجح" في الخلية اللي في العمود الثاني والصف X (نفس الصف بالطبع لأن قيمة X في الحالة دي هي هي نفس القيمة لأننا في نفس اللفة) .. إذا لم يتحقق الشرط قام بتنفيذ الجزء الثاني بأن يكتب النص "راسب" ثم إغلاق جملة IF بالجملة End IF ومننساش القفلة زي ما اتعودنا..


ننتقل لآخر مثال في الحلقة دي (عشان أنا تعبت وإنتو كمان أكيد تعبتو)

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

المطلوب إننا في الصف الرابع ، نكتب معادلة
=COLUMN()

بس في الأعمدة من العمود رقم 1 إلى العمود رقم 15 (A To O)

نعقدها شوية ونقول في الأعمدة اللي رقمها فردي بس (الأعمدة اللي رقمها زوجي مش محتاجينها)

يعني ببساطة عايزين نحط المعادلة في الأعمدة A C E G I K M O

Sub ColumnsLoop()
    Dim X As Long
    For X = 1 To 15 Step 2
        Cells(4, X).Formula = "=COLUMN()"
    Next X
End Sub

الحلقة التكرارية بدأت من العمود الأول حتى العمود رقم 15 (البداية والنهاية)

معلومة جديدة Step 2
(دي معناها إننا هنقفز ..والقفز هيكون بمقدار 2 أي خطوتين) بدأنا بـ 1 فلما نقفز بمقدار 2 ، هنروح لرقم 3 ، أي أن المتغير سيكون رقم فردي في كل مرة 1 ، 3 ، 5 ، 7 ، 9 ، 11 ، 13 ، 15 (وهو دا المطلوب بالضبط)

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

طيب الجزء الأول من السطر نلاحظ إننا استخدمنا Cells ودي بتكون متبوعة بقوسين ، وبين القوسين رقم الصف ثم فاصلة ثم رقم العمود ، وبما إن رقم الصف ثابت اللي هو رقم 4 ، فكتبناه زي ما هو .. اما رقم العمود فمتغير فوضعنا رقم العمود X ...


جرب الكود وشوف النتيجة بنفسك

أرجو أن أكون قد وفقت في توصيل المعلومة بأسلوب مبسط

كان معكم أخوكم أبو البراء من تراك أكاديمية الصقر (لف على الحلقات من الحلقة رقم 1 إلى الحلقة رقم 14 .. لو عايز تتعلم الـ VBA)

ويا رب ميكونش فيه حد جاله دووووووووخة من كتر اللف .. والله أنا اللي دوخت blushing

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

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

أثارت هذه المشاركة إعجاب: احمد الحاوي، mahmoud ayad، YasserKhalil، الصقر،





02-08-2018 06:13 صباحا
مشاهدة مشاركة منفردة [1]
احمد الحاوي
menu_open
عضو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 27-08-2017
رقم العضوية : 213
المشاركات : 31
الجنس : ذكر
تاريخ الميلاد : 20-12-1971
يتابعهم : 7
يتابعونه : 2
قوة السمعة : 76
الاعجاب : 28
 offline 
look/images/icons/i1.gif الحلقة الرابعة عشر الحلقات التكرارية
رائع ..جزاك الله خيرا استاذنا ابا البراء ...والشكر موصول للاستاذ اسلام عبد الله .


أثارت هذه المشاركة إعجاب: YasserKhalil، Eslam Abdullah،




02-08-2018 07:48 صباحا
مشاهدة مشاركة منفردة [2]
mahmoud ayad
menu_open
عضو فعال
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 15-03-2018
رقم العضوية : 4874
المشاركات : 120
الجنس : ذكر
تاريخ الميلاد : 29-5-1982
يتابعهم : 4
يتابعونه : 2
قوة السمعة : 277
الاعجاب : 121
 offline 
look/images/icons/i1.gif الحلقة الرابعة عشر الحلقات التكرارية
رائع انت استاذ اسلام فهل من أحد هنا يسهل ويبسط وييسر ويفهم مثلك
إني أحبك في الله
جزيت خيرا عنا

أثارت هذه المشاركة إعجاب: YasserKhalil، Eslam Abdullah،




02-08-2018 07:52 صباحا
مشاهدة مشاركة منفردة [3]
salim
menu_open
خبير معتمد
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 22-08-2017
رقم العضوية : 43
المشاركات : 185
الجنس : ذكر
تاريخ الميلاد : 1-5-1989
يتابعهم : 13
يتابعونه : 6
قوة السمعة : 2058
الاعجاب : 417
 offline 
look/images/icons/i1.gif الحلقة الرابعة عشر الحلقات التكرارية
لماذا  أخر حلقات افتح الباب ياعبد التواب
ما تسيبوها يا اخي مسلسل مكسيكي

أثارت هذه المشاركة إعجاب: YasserKhalil، Eslam Abdullah،




02-08-2018 08:26 صباحا
مشاهدة مشاركة منفردة [4]
YasserKhalil
menu_open عضوية موثقة
مراقب عام
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 21-08-2017
رقم العضوية : 3
المشاركات : 4626
الجنس : ذكر
تاريخ الميلاد : 1-10-1978
الدعوات : 11
يتابعهم : 0
يتابعونه : 318
قوة السمعة : 13297
الاعجاب : 4914
 offline 
look/images/icons/i1.gif الحلقة الرابعة عشر الحلقات التكرارية
أخي العزيز أحمد الحاوي
الأروع هو مرورك العطر بالموضوع .. بارك الله فيك

أخي العزيز محمود 
أحبك الله الذي أحببتنا فيه ومشكور على كلماتك الطيبة

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

وهتسألني عن منة!! هقولك شوف إسلام يسأل عنايات ويعرفنا بمنة laugh

أثارت هذه المشاركة إعجاب: salim، Eslam Abdullah، mahmoud ayad، احمد الحاوي،





المواضيع المتشابهه
عنوان الموضوع الكاتب الردود الزوار آخر رد
4-المحاضرة الرابعة دورة استخدام الاكسيل فى تحليل البيانات مع عبدالجيد محمد-ج1-تحديد النطاقات عبدالجيد
2 17 ali mohamed ali
الحلقة الرابعة المتغيرات Eslam Abdullah
12 466 YasserKhalil

الكلمات الدلالية
الحلقة ، الرابعة ، الحلقات ، التكرارية ،


 







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



الساعة الآن 04:41 مساء

أعلن هنا
أعلن هنا
أعلن هنا