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

Single Loop


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

أخي الفاضل زمزم

لقد قمت بعرض موضوع مشابه إن لم يكن هو تماما في الرابط

http://www.officena.net/ib/index.php?showtopic=54124

 

وتم عرض بعض الاشياء مبدئيا إلى أن يتم الشرح  إن شاء الله

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

أخي الفاضل زمزم

لقد قمت بعرض موضوع مشابه إن لم يكن هو تماما في الرابط

http://www.officena.net/ib/index.php?showtopic=54124

 

وتم عرض بعض الاشياء مبدئيا إلى أن يتم الشرح  إن شاء الله

احسن الله اليك اخي ابو يمان 

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

السلام عليكم

Dim i As Integer

For i = 1 To 6
     Cells(i, 1).Value = 100
Next i

حلقة  دورانية عدد دوراتها ستة دورات

بدايتها 1 نهايتها 6

المتغير i ياخذ قيمة الحلقة الدوارانة

مثلا في الدورة الاولى يأخذ القيمة  1 والدورة الثانية يأخذ القيمة 2 .......الى غاية الدورة الاخيرة ليأخذ القيمة 6

cells(i,1)

تعني الخلية التي تقع في العمود الاول والصف يكون بقيمة المتغير i

مثلا في الدورة الاولى للحلقة التكرارية تكون

cells(1,1)

في هذا المثال تأخذ الخلية الاولى في العمود الاول القيمة 100

وهكذا الى نهاية الحلقة التكرارية

Dim i As Integer, j As Integer

For i = 1 To 6
     For j = 1 To 2
         Cells(i, j).Value = 100
     Next j
Next i

حلقة تكرارية متداخلة

هنا لدينا حلقة دورانية داخل حلقة اخرى

الحلقة الرئيسة تنفذ الحلقة الفرعية التي في داخلها ستة مرات

اما الحلقة الفرعية تنفذ الامر الذي بداخلها مرتين

لكي تفهمها بشكل ابسط  فل نستعرضها بالعرض البطيء

نفرض اننا في الدورة الاولى للحلقة الرئيسسية اذا المتغير i الخاص بها يأخذ القيمة 1

عندما يصل التنفيذ للحلقة الفرعية (الحلقة الثانية) المتغير  j الخاص بها يأخذ القيمة 1 لانه في الدورة الاولى للحلقة الثانية

ملاحظة  لاينتقل تنفيذ الكود الى الاكواد الاخرى الا بعد انتهاء دورات الحلقة او ان كان هناك امر للخروج من الحلقة  exit for

اذا اصبحت قيمة  i = 1 / j =1  ومنه يصبح شكل الكود

ceels(1,1)

يعني اننا في الخلية الاولى للعمود الاول

كما قلنا سابقا ان تنفيذ الكود لاينتقل الابعد انتهاء الحلقة التكرارية اذن ستكمل حلقتنا الفرعية دورتها الثانية ومنه المتغير j سيأخذ القيمة 2 لاكن المتغير i سيبقى على قيمته الاولى أي 1 لان الكود لم ينتهي من دورات الحلقة الثانية ولم ينتقل الى الدورة الثانية للحلقة الاولى ومنه الكود يصبح على الشكل

cells(1,2)

ومعناه الخلية الاولى في العمود الثاني

وهكدا لبقية دورات الحلقتين

عند انتهاء الكود يكون لدينا في الشيت من الخلية الاولى الى الخلية السادسة في العمود الاول تساوى 100

كذالك نفس الامر بنسبة للعمود الثاني

Dim c As Integer, i As Integer, j As Integer

For c = 1 To 3
     For i = 1 To 6
         For j = 1 To 2
             Worksheets(c).Cells(i, j).Value = 100
         Next j
     Next i
Next c

هاته ايضا حلقة تكرارية متشابكة او متداخلة ان صح التعبيري

نفس الكلام السابق لاكن بدل من انه لدينا حلقتين الان لدينا ثلاث حلقات

الحلقة الاولى تنفذ ما بداخلها ثلاث مرات

والثانية ننفذ ما بداخلها ستة مرات

والثالثة تنفذ ما بداخلها مرتين

Dim i As Integer
 i = 1

Do While i < 6
     Cells(i, 1).Value = 20
     i = i + 1
Loop

هي ايضا حلقة دورانية الاختلاف بينها وبين ماسبق من حلقات

هو الاولى لديها بدايو ونهاية محدود

ام الثانية (Do Loop) ليس لديها نهاية (لا نهائية) انما تتوقف عن الدوران بشرط

في المثال اعلاه الحلقة تنفذ ستة دورات لان االشرط هو اذا كانت قيمة المتغير اصغر من الستتة واصل الدوران ان كان اكبر توقف عن الدوران

هذا شرح للكود كلاميا ان صح التعبير

ملاحظة  المثال في الكود الاخير و في الكود الاول ليس بينهما أي فرق كلاهما يعطي نفس النتيجة

الفرق الوحيد ان الاخيرة اسرع في التنفيذ من الاولى

 

ارجو ان يكون الشرح حول الحلقات مفوه اوكافي وان ان كان هناك أي استفسارات فلا تتردد

تحياتي للجميع

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

جزاكم الله خيرا أستاذ شوقي ربيع على الشرح الرائع

وإثراءا للموضوع يمكن استخدام كلمة اسمها step مع الحلقة التكرارية for next وفائدتها تزيد الأرقام بمعد ثابت 

ففي المثال السابق يتم العد ( أو الزيادة ) بواحد  أي تكون الأرقام 1 - 2 - 3 - 4 - 5 - 6 أي الحلقة تدور 6 مرات ( تنفيذ الأوامر بين for ... next  )

 

أما في حالة كتابة step 2  مثلا تكون الحلقة التكرارية 3 خطوات فقط   ( 1 - 3- 5 )  ويتم تنفيذ الأوامر 3 مرات فقط 

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information