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

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

قام بنشر

السلام عليكم

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information