TOP

VBA-पाठ 8.2. लूप्स (Loops)

हमने अभी जो सीखा है उसका अभ्यास करने के लिए, हम वर्तमान में सक्रिय सेल से शुरू करके 10x10 चेकरबोर्ड (लाल और काला) को पेंट करने के लिए मैक्रो बनाने की प्रक्रिया से गुजरेंगे।


आइए उस लूप के आउटपुट को देखें जिसे हम प्राप्त करना चाहते हैं:

अगला, अभ्यास का पहला चरण एक खाली प्रक्रिया बनाना होगा:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'हम जितने सेल पेंट करना चाहते हैं

    '...
   
End Sub

आइए कॉलम A को काला करने के लिए FOR लूप जोड़कर शुरुआत करें (NB_CELLS स्थिरांक 10 है)।

हमें निम्नलिखित परिणाम मिलना चाहिए:

आइए कोड पर एक नज़र डालें:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'हम जितने सेल पेंट करना चाहते हैं

    For r = 1 To NB_CELLS 'आर => पंक्ति संख्या
   
        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 'आर => पंक्ति संख्या
   
       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 है...

केवल वह पंक्ति संख्या जो सम है, उसे 2 से विभाजित करने पर 0 शेष बचता है:

एक और लूप कैसे बनाएं जो लूप को निष्पादित करेगा, हम पहले ही 10 कॉलम के लिए लिख चुके हैं। देखना निचला:

इस उपकार्य को हल करने का कोड इस प्रकार है:

Sub loops_exercise()

    Const NB_CELLS As Integer = 10 'कोशिकाओं के साथ 10x10 बिसात

    For r = 1 To NB_CELLS 'आर => पंक्ति संख्या
   
        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

जो कुछ करना बाकी है वह कोड को बदलना है ताकि चेकरबोर्ड चयनित सेल (ए 1 नहीं) से शुरू हो सके। नीचे देखें:

इसके लिए हम निम्नलिखित कोड लिखेंगे:

Sub loops_exercise()

   Const NB_CELLS As Integer = 10 'कोशिकाओं के साथ 10x10 बिसात
   Dim offset_row As Integer, offset_col As Integer '=> 2 वेरिएबल जोड़ें
   
   'पहले सेल से शुरू होने वाली ऑफसेट (पंक्तियाँ) = वर्तमान सक्रिय सेल की पंक्ति संख्या - 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