TOP

VBA-الدرس 8.2. الحلقات (Loops)

لممارسة ما تعلمناه للتو ، سنتابع عملية إنشاء ماكرو لرسم لوحة تحقق 10x10 (باللونين الأحمر والأسود) بدءًا من الخلية النشطة حاليًا.


لنلقِ نظرة على ناتج الحلقة التي نريد الحصول عليها:

بعد ذلك ، ستكون الخطوة الأولى من التمرين هي إنشاء إجراء فارغ:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'عدد الخلايا التي نريد رسمها

    '...
   
End Sub

لنبدأ بإضافة حلقة FOR إلى العمود الأسود A (ثابت NB_CELLS هو 10).

يجب أن نحصل على النتيجة التالية:

دعنا نلقي نظرة على الكود:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'عدد الخلايا التي نريد رسمها

    For r = 1 To NB_CELLS 'r => رقم الصف
   
        Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'أسود

    Next
   
End Sub

تقوم الخطوة التالية بتلوين كل خلية لاحقة باللون الأحمر ، باستخدام تعليمة IF (بناءً على ما إذا كان رقم الصف زوجيًا أم فرديًا). يرى أدنى:

رمز حل هذه المهمة الفرعية هو كما يلي:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'عدد الخلايا التي نريد رسمها

    For r = 1 To NB_CELLS 'r => رقم الصف
   
       If r Mod 2 = 0 Then 'Mod => هو الباقي من القسمة
           Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'أحمر
       Else
           Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'أسود
       End If

    Next
   
End Sub

الشرط IF r Mod 2 = 0 يعني: إذا كان باقي قسمة r على 2 هو 0 ...

فقط رقم الصف الذي يحتوي على باقي 0 عند قسمة 2:

كيف نصنع حلقة أخرى من شأنها أن تنفذ الحلقة التي كتبناها بالفعل لـ 10 أعمدة. يرى أدنى:

رمز حل هذه المهمة الفرعية هو كما يلي:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 '10x10 رقعة شطرنج مع خلايا

    For r = 1 To NB_CELLS 'r => رقم الصف
   
        For c = 1 To NB_CELLS 'ج => رقم العمود
       
           If r Mod 2 = 0 Then
               Cells(r, c).Interior.Color = RGB(200, 0, 0) 'أحمر
           Else
               Cells(r, c).Interior.Color = RGB(0, 0, 0) 'أسود
           End If
           
        Next
    Next
   
End Sub

الآن يتم إدخال الدورة الثانية في الأولى.

لتحقيق النتيجة التالية ...

يستبدل:

If r Mod 2 = 0 Then

على:

If (r + c) Mod 2 = 0 Then

كل ما تبقى القيام به هو تغيير الكود بحيث يتم إنشاء رقعة الداما بدءًا من الخلية المحددة (وليس A1). انظر أدناه:

لهذا سنكتب الكود التالي:

Sub loops_exercise()

   Const NB_CELLS As Integer = 10 '10x10 رقعة شطرنج مع خلايا
   Dim offset_row As Integer, offset_col As Integer '=> أضف متغيرين
   
   'الإزاحة (الصفوف) التي تبدأ من الخلية الأولى = رقم الصف للخلية النشطة الحالية - 1
   offset_row = ActiveCell.Row - 1
   'الإزاحة (الأعمدة) تبدأ من الخلية الأولى = رقم عمود الخلية النشطة الحالية - 1
   offset_col = ActiveCell.Column - 1
   
   For r = 1 To NB_CELLS 'رقم السطر
   
        For c = 1 To NB_CELLS 'رقم العمود
       
            If (r + c) Mod 2 = 0 Then
            'الخلية (رقم الصف + إزاحة الصف الإضافية ، رقم العمود +
            'إزاحة إضافية من مكبرات الصوت)
                Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'أحمر
            Else
                Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'أسود
            End If
           
        Next
   Next
   
End Sub