TOP

VBA-पाठ 7.1. शर्तें (Conditionss)

प्रोग्रामिंग में स्थितियाँ बहुत उपयोगी होती हैं क्योंकि वे हमें निर्धारित मानदंडों के आधार पर कार्य करने की अनुमति देती हैं (उसी सिद्धांत का उपयोग IF फ़ंक्शन Excel में किया जाता है)।

VBA यदि...तब...अन्यथा कथन इस पर निर्भर करते हुए कथनों के एक सेट को निष्पादित करता है कि निर्दिष्ट स्थिति सत्य है या नहीं। यदि शर्त (तार्किक परीक्षण) पूरी हो जाती है, तो क्रियाओं का एक सेट निष्पादित किया जाता है। हालाँकि, यदि स्थिति गलत है, तो कार्रवाइयों का एक वैकल्पिक सेट किया जाता है।

हालाँकि, पठनीयता के लिए, आप नेस्टेड इफ...थेन...एल्स स्टेटमेंट के कई स्तरों के बजाय Select Case स्टेटमेंट का उपयोग कर सकते हैं।


अगर तब या

तो, शर्त निर्धारित करने वाला सबसे महत्वपूर्ण फ़ंक्शन IF है और अब हम देखेंगे कि यह कैसे काम करता है:

If [यहाँ शब्द] Then '=> यदि शर्त सत्य है तो
   'निर्देश यदि "सत्य"
Else '=> अन्यथा
   'निर्देश यदि "झूठ"
End If

आइए व्यावहारिक बनें और उस उदाहरण पर वापस जाएँ जिसका उपयोग हमने परिवर्तनीय पाठ में किया था। इस प्रक्रिया का उद्देश्य एक संवाद बॉक्स प्रदर्शित करना था जो सेल F5 में निर्दिष्ट स्ट्रिंग से मान प्रदर्शित करेगा:

यदि आप F5 सेल में कोई अक्षर टाइप करते हैं, तो यह एक त्रुटि उत्पन्न करेगा। हम इसे रोकना चाहते हैं.

Sub variables()
   'चरों की घोषणा
   Dim last_name As String, first_name As String, age As Integer, row_number As Integer
       
   'वेरिएबल्स को मान निर्दिष्ट करना
   row_number = Range("F5") + 1
   
   last_name  = Cells(row_number, 1)
   first_name = Cells(row_number, 2)
   age        = Cells(row_number, 3)
   
   'संवाद बकस
   MsgBox last_name & " " & first_name & ", " & age & "साल"
End Sub

आइए एक शर्त जोड़ें जो कोड निष्पादित होने से पहले जांच करेगी कि सेल F5 में दर्ज किया गया मान एक संख्या है या नहीं।

हम स्थिति का परीक्षण करने के लिए IsNumeric फ़ंक्शन का उपयोग करेंगे:

Sub variables()
  'यदि कोष्ठक (सेल F5) में मान संख्यात्मक है (इसलिए IF शर्त सत्य है) तो
  'उसके बाद आने वाले निर्देशों को निष्पादित करें
   If IsNumeric(Range("F5")) Then
   
       'चरों की घोषणा
       Dim last_name As String, first_name As String, age As Integer, row_number As Integer
       
       'वेरिएबल्स को मान निर्दिष्ट करना
       row_number = Range("F5") + 1
       
       last_name  = Cells(row_number, 1)
       first_name = Cells(row_number, 2)
       age        = Cells(row_number, 3)
       
       'संवाद बकस
       MsgBox last_name & " " & first_name & ", " & age & "साल"
    End If
End Sub

यदि हमारे द्वारा निर्धारित शर्त पूरी नहीं होती है तो हमें निर्देश भी लिखने होंगे:

Sub variables()
    If IsNumeric(Range("F5")) Then 'यदि शर्त पूरी होती है
   
       'चरों की घोषणा
       Dim last_name As String, first_name As String, age As Integer, row_number As Integer
       
       'वेरिएबल्स को मान निर्दिष्ट करना
       row_number = Range("F5") + 1
       
       last_name  = Cells(row_number, 1)
       first_name = Cells(row_number, 2)
       age        = Cells(row_number, 3)
       
       'संवाद बकस
       MsgBox last_name & " " & first_name & ", " & age & "साल"
       
    Else 'यदि शर्त पूरी नहीं होती है
   
       'संवाद बॉक्स: चेतावनी
       MsgBox "दर्ज किया गया मान" & Range("F5") & "यह सच नहीं है!"
       
       'सेल F5 की सामग्री हटाएँ
       Range("F5").ClearContents
    End If
End Sub

अब गैर-संख्यात्मक मान से कोई समस्या नहीं आएगी।

हमारे एरे के साथ काम करते हुए जिसमें डेटा की 16 पंक्तियाँ हैं, हमारा अगला कदम यह जाँचना होगा कि क्या row_number वेरिएबल है: "2 से बड़ा या उसके बराबर" और "17 से कम या उसके बराबर"।

लेकिन पहले, आइए तुलना ऑपरेटरों पर नजर डालें:

= बिल्कुल
<> बिल्कुल नहीं
< से कम
<= से कम या बराबर
> इससे अधिक
>= इससे बड़ा या इसके बराबर

और ये उपयोगी ऑपरेटर:

AND [स्थिति1] AND [स्थिति2] दो शर्तें पूरी होनी चाहिए
OR[स्थिति 1] OR [स्थिति 2] कि 2 में से कम से कम 1 शर्त पूरी होनी चाहिए
NOTNOT [स्थिति 1] शर्त पूरी नहीं होनी चाहिए

आइए अब तुलना ऑपरेटरों के बीच उपरोक्त AND शर्तों में से एक जोड़ें:

Sub variables()
    If IsNumeric(Range("F5")) Then 'यदि कोई संख्यात्मक मान
    
        Dim last_name As String, first_name As String, age As Integer, row_number As Integer
        
        row_number = Range("F5") + 1

        If row_number >= 2 And row_number <= 17 Then 'यदि सही संख्या है
        
            last_name  = Cells(row_number, 1)
            first_name = Cells(row_number, 2)
            age        = Cells(row_number, 3)
            
            MsgBox last_name & " " & first_name & ", " & age & "साल"
            
        Else 'यदि संख्या सही नहीं है
            MsgBox "दर्ज किया गया नंबर" & Range("F5") & "सही नहीं!"
            Range("F5").ClearContents
        End If
       
    Else 'यदि यह कोई संख्यात्मक मान नहीं है
        MsgBox "दर्ज किया गया मान" & Range("F5") & "यह सच नहीं है!"
        Range("F5").ClearContents
    End If
End Sub

यदि हम अपने मैक्रो को अधिक व्यावहारिक बनाना चाहते हैं, तो हम 17 को एक वेरिएबल से बदल सकते हैं जो लाइनों की संख्या रखेगा। यह हमें हर बार इस सीमा को बदले बिना सरणी से पंक्तियाँ जोड़ने और हटाने की अनुमति देगा।

ऐसा करने के लिए, हमें एक वेरिएबल nb_rows बनाना होगा और इस फ़ंक्शन को जोड़ना होगा।

इस मामले में, हम WorkSheetFunction.CountA फ़ंक्शन का उपयोग करेंगे, जो Excel में COUNTA फ़ंक्शन के अनुरूप है।

हम चाहते हैं कि यह फ़ंक्शन पहले कॉलम में गैर-रिक्त कोशिकाओं की संख्या की गणना करे और परिणामी मान को nb_rows वेरिएबल में लिखे:

Sub variables()
    If IsNumeric(Range("F5")) Then 'यदि संख्या
    
        Dim last_name As String, first_name As String, age As Integer, row_number As Integer
        Dim nb_rows As Integer
       
        row_number = Range("F5") + 1
        nb_rows    = WorksheetFunction.CountA(Range("A:A")) 'पंक्तियों की संख्या गिनने का कार्य
       
        If row_number >= 2 And row_number <= nb_rows Then 'यदि वैध संख्या
        
            last_name  = Cells(row_number, 1)
            first_name = Cells(row_number, 2)
            age        = Cells(row_number, 3)
            
            MsgBox last_name & " " & first_name & ", " & age & "साल"
            
        Else 'यदि संख्या गलत है
            MsgBox "दर्ज किया गया नंबर" & Range("F5") & "सही नहीं!"
            Range("F5").ClearContents
        End If

    Else 'यदि संख्या नहीं है
        MsgBox "दर्ज किया गया मान" & Range("F5") & "यह सच नहीं है!"
        Range("F5").ClearContents
    End If
End Sub

अन्यथा

ElseIf IF कमांड के बाद अतिरिक्त शर्तें जोड़ना संभव बनाता है:

If [शर्त 1] Then '=> यदि शर्त 1 सत्य है तो
   'निर्देश 1
ElseIf [शर्त 2] Then '=> यदि शर्त 1 गलत है लेकिन शर्त 2 सत्य है तो
   'निर्देश 2
Else '=> अन्यथा
   'निर्देश 3
End If

यदि शर्त 1 सत्य है, तो कथन 1 IF कथन को निष्पादित और बाहर कर देगा (जो IF से शुरू होता है और End if पर समाप्त होता है)। यदि शर्त 2 गलत लौटाती है, तो कथन 2 निष्पादित किया जाएगा, और यदि यह गलत लौटाता है, तो कथन 3 (अन्यथा के तहत) निष्पादित किया जाएगा।

यहां सेल ए1 में ग्रेड 1 से 6 तक का एक उदाहरण दिया गया है और सेल बी1 में उन ग्रेडों पर एक टिप्पणी दी गई है:

Sub scores_comment()
    'चर
    Dim note As Integer, score_comment As String
    
    note = Range("A1")
   
    'प्राप्त अंक के आधार पर टिप्पणियाँ
    If note = 6 Then
        score_comment = "बढ़िया स्कोर!"
    ElseIf note = 5 Then
        score_comment = "अच्छी बात"
    ElseIf note = 4 Then
        score_comment = "संतोषजनक स्कोर"
    ElseIf note = 3 Then
        score_comment = "असंतोषजनक स्कोर"
    ElseIf note = 2 Then
        score_comment = "ख़राब स्कोर"
    ElseIf note = 1 Then
        score_comment = "भयानक स्कोर"
    Else
        score_comment = "शून्य अंक"
    End If
   
    'सेल बी1 में टिप्पणी करें
    Range("B1") = score_comment
End Sub

Select Case

कई ElseIf कथनों के साथ if का उपयोग करने का एक विकल्प है, अर्थात् Select Case कमांड, जो इस तरह की स्थिति के लिए अधिक उपयुक्त है।

ऑपरेटर Select Case के साथ मैक्रो के एक उदाहरण पर विचार करें:

Sub scores_comment()
    'चर
    Dim note As Integer, score_comment As String
    
    note = Range("A1")
   
    'प्राप्त अंक के आधार पर टिप्पणियाँ
    Select Case note    '=> परीक्षण स्कोर (अंक)
        Case Is = 6         '=> यदि मान = 6
           score_comment = "बढ़िया स्कोर!"
        Case Is = 5         '=> यदि मान = 5
           score_comment = "अच्छी बात"
        Case Is = 4         '=> यदि मान = 4
           score_comment = "संतोषजनक स्कोर"
        Case Is = 3         '=> यदि मान = 3
           score_comment = "असंतोषजनक स्कोर"
        Case Is = 2         '=> यदि मान = 2
           score_comment = "ख़राब स्कोर"
        Case Is = 1         '=> यदि मान = 1
           score_comment = "भयानक स्कोर"
        Case Else           '=> यदि मान उपरोक्त में से किसी के बराबर नहीं है
           score_comment = "शून्य अंक"
    End Select
   
    'सेल बी1 में टिप्पणी करें
    Range("B1") = score_comment
End Sub

यह ध्यान देने योग्य है कि हम अन्य तुलना ऑपरेटरों का भी उपयोग कर सकते हैं:

Case Is >= 6         'यदि मान >= 6

विभिन्न अर्थों वाले उदाहरण:

Case Is = 6, 7       'यदि मान = 6 या 7
Case Is <> 6, 7      'यदि मान 6 या 7 के बराबर नहीं है
Case 6 To 10         'यदि मान = 6 से 10 तक कोई भी संख्या