मुख्य सामग्री पर जाएं

VBA InStr फ़ंक्शन: Excel VBA में टेक्स्ट कैसे खोजें

VBA InStr फ़ंक्शन का उपयोग करके स्ट्रिंग्स के अंदर टेक्स्ट ढूंढना सीखें—सिंटैक्स, उदाहरण, केस सेंसिटिविटी, और आम गलतियाँ सहित।
अद्यतन 21 सित॰ 2026  · 9 मि॰ पढ़ना

AI के साथ खोजें

ChatGPTClaudePerplexity

यदि आपने कुछ से अधिक VBA मैक्रो लिखे हैं, तो शायद आपको यह स्थिति आई होगी जब आपको जाँचना होता है कि किसी सेल के अंदर कोई टेक्स्ट मौजूद है या नहीं। VBA में, InStr ऐसा फ़ंक्शन है जिसे आप लगभग हर जगह इस्तेमाल करते हैं। यह बताता है कि एक टेक्स्ट दूसरे के अंदर कहाँ दिखाई देता है। आप इसका उपयोग यह जाँचने के लिए कर सकते हैं कि सेल में कोई टेक्स्ट है या नहीं, किसी टेक्स्ट से मान पार्स करने के लिए, या ऐसे मैक्रोज़ में कंडीशनल लॉजिक चलाने के लिए जो टेक्स्ट पैटर्न पर निर्भर करते हैं।

इस गाइड में, मैं आपको InStr का सिंटैक्स, कुछ उदाहरण, तुलना मोड कैसे काम करते हैं (यह हिस्सा ज़रूरत से ज़्यादा लोगों को उलझा देता है), और कुछ ऐसे पैटर्न दिखाऊँगा जिन्हें आप वास्तव में दोबारा इस्तेमाल करेंगे।

मैं अनुशंसा करता/करती हूँ कि आप हमारी Excel Fundamentals स्किल ट्रैक से शुरुआत करें ताकि VBA पर आगे बढ़ने से पहले मज़बूत नींव बने, या यदि आपको कुछ अनुभव है तो हमारा Advanced Excel Functions कोर्स लें, ताकि जान सकें कि फ़ंक्शंस डेटा विश्लेषण में दक्षता कैसे बढ़ाते हैं।

VBA InStr फ़ंक्शन क्या है?

InStr एक VBA फ़ंक्शन है जो एक स्ट्रिंग के भीतर दूसरी स्ट्रिंग की पहली घटना की स्थिति (पोज़िशन) लौटाता है।

परिणाम इस प्रकार व्यवहार करते हैं:

  • यदि मिला, तो यह एक संख्या लौटाता है (जहाँ मैच शुरू होता है उसकी स्थिति)
  • यदि कुछ नहीं मिलता, तो यह 0 लौटाता है

उदाहरण के लिए, यदि “cat” किसी स्ट्रिंग में स्थिति 5 पर आता है, तो आपको 5 मिलता है। यदि वह वहाँ नहीं है, तो 0 मिलता है।

VBA InStr सिंटैक्स

यह रहा पूरा InStr सिंटैक्स:

InStr([start], string1, string2, [compare])

जहाँ:

  • start (वैकल्पिक): यह VBA को बताता है कि खोज कहाँ से शुरू करनी है। यदि इसे छोड़ दें, तो VBA स्थिति 1 से शुरू करता है।

  • string1 (आवश्यक): पूरा टेक्स्ट जिसमें आप खोज रहे हैं।

  • string2 (आवश्यक): वह टेक्स्ट जिसे आप ढूँढना चाहते हैं।

  • compare (वैकल्पिक): तुलना कैसे की जाएगी (केस-सेंसिटिव या नहीं) को परिभाषित करता है। यदि आप इसे छोड़ दें, तो VBA डिफ़ॉल्ट तुलना मोड उपयोग करता है, जो आमतौर पर केस-सेंसिटिव होता है।

ध्यान दें कि आप start और compare आर्ग्यूमेंट्स को नज़रअंदाज़ कर सकते हैं (InStr(string1, string2)) ताकि एक सरल संस्करण मिले। लेकिन यदि आप compare आर्ग्यूमेंट का उपयोग करते हैं, तो आपको start आर्ग्यूमेंट भी देना होगा।

VBA InStr कैसे काम करता है

InStr को ऐसे समझें जैसे किसी वाक्य को बाएँ से दाएँ, एक-एक अक्षर पढ़ते जाना।

फ़ंक्शन string1 से शुरू होता है, उसे स्कैन करता है, और पहली जगह ढूँढता है जहाँ string2 मेल खाता है। जैसे ही मैच मिलता है, यह रुक जाता है और वह स्थिति लौटाता है जहाँ से मैच शुरू हुआ था।

“मैच” की स्थिति अहम है क्योंकि VBA गिनती 1 से करता है, 0 से नहीं। तो स्ट्रिंग का पहला अक्षर स्थिति 1, दूसरा 2, और इसी तरह आगे। 

VBA InStr रिटर्न मानों की व्याख्या

InStr फ़ंक्शन के परिणाम की व्याख्या करना सीधा है। आपको निम्न में से कोई एक मिल सकता है:

  • धनात्मक संख्या: यदि मैच मिलता है, और संख्या बताती है कि वह कहाँ शुरू होता है।

  • 0: यदि स्ट्रिंग में कहीं भी मैच नहीं है

हालाँकि, यदि आपके इनपुट स्ट्रिंग्स Null हैं, तो फ़ंक्शन Null लौटाता है। बुनियादी मैक्रोज़ के लिए आप इसे नज़रअंदाज़ कर सकते हैं, लेकिन यह फर्क किसी कंडीशन को चुपचाप बिगाड़ सकता है—ध्यान देने लायक है।

बेसिक VBA InStr उदाहरण

अब मैं आपको दिखाता/दिखाती हूँ कि VBA InStr फ़ंक्शन का उपयोग कैसे करें—कुछ उदाहरणों के साथ। 

वाक्य में कोई शब्द ढूँढना

जाँचने के लिए कि “Deliver before noon” नोट के अंदर “before” शब्द है या नहीं।

Sub Before()

    Dim result As Integer
    result = InStr("Deliver before noon", "before")
    
    MsgBox result

End Sub

उपरोक्त VBA का परिणाम 9 है क्योंकि “before” 9वें अक्षर से शुरू होता है।

जाँचें कि कोई अक्षर मौजूद है या नहीं

यह जाँचने के लिए कि दिए गए स्ट्रिंग में “0” अक्षर मौजूद है या नहीं, यह VBA उपयोग करें:

Sub ChExist()

    Dim result As Integer
    result = InStr(“A1023”, “0”)
    
    MsgBox result

End Sub

इस मामले में, 0 से बड़ा कोई भी परिणाम दर्शाता है कि अक्षर मिल गया है।

स्ट्रिंग की शुरुआत से खोजें

स्ट्रिंग की शुरुआत से खोजने के लिए, आपको स्टार्ट पोज़िशन बताने की ज़रूरत नहीं है—यह 1 से शुरू होता है। यह हर बार डिफ़ॉल्ट है, जब तक आप कुछ और न कहें।

Sub ChExist()

    Dim result As Integer
    result = InStr("Report_2026_Final", "2026")
    
    MsgBox result

End Sub

If स्टेटमेंट्स में VBA InStr का उपयोग कैसे करें

किसी वास्तविक स्प्रेडशीट पर काम करते समय, आप सिर्फ़ एक संख्या नहीं ढूँढ रहे होते—आप निर्णय लेना चाहते हैं। InStr का सबसे आम उपयोग किसी If स्टेटमेंट के अंदर डेटा फ़िल्टर करने के लिए होता है।

इस ट्यूटोरियल में, हम एक सैंपल डेटासेट Orders का उपयोग करेंगे, जिसमें कॉलम हैं: ID, CustomerName, Email, City, और OrderNotes

If InStr(...) > 0 Then

चूँकि InStr कुछ नहीं मिलने पर 0 लौटाता है, हम जाँचते हैं कि परिणाम मौजूद है या नहीं—जब यह 0 से बड़ी संख्या लौटाता है।

नीचे दिए उदाहरण में, यह OrderNotes कॉलम (कॉलम 5) को देखता है। यदि “Fragile” शब्द मिलता है, तो कॉलम 6 में “Handle Carefully” लिखता है।

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention "Fragile"
        If InStr(Cells(i, 5).Value, "Fragile") > 0 Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

कीवर्ड के लिए कंडीशनल जाँच और टेक्स्ट फ़िल्टरिंग

आप InStr फ़ंक्शन का उपयोग स्ट्रिंग्स में कीवर्ड जाँचने के लिए भी कर सकते हैं, खासकर जब वाक्यांश थोड़ा बदलता हो। उदाहरण के लिए, नीचे का कोड जाँचता है कि नोट में “Call” है (जैसे “Call on arrival” या “Call before delivery”)। फिर यह फ़्लैग करता है और कॉलम 6 में “Cal Customer” टैग जोड़ता है।

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention “Call”
        If InStr(Cells(i, 5).Value, “Call”) > 0 Then
            Cells(i, 6).Value = “Call Customer”
        End If
        
    Next i

End Sub

VBA InStr केस सेंसिटिविटी और Compare मोड्स

डिफ़ॉल्ट रूप से, InStr केस-सेंसिटिव होता है (जिसे vbBinaryCompare कहा जाता है)। मान लीजिए आप “chicago” खोजते हैं लेकिन डेटा में “Chicago” है—InStr 0 लौटाएगा।

इसे ठीक करने के लिए, आप compare आर्ग्यूमेंट का उपयोग करते हैं, जहाँ:

  • vbBinaryCompare (डिफ़ॉल्ट): केस-सेंसिटिव (“A” “a” के बराबर नहीं है)

  • vbTextCompare: केस-इनसेंसिटिव—“A” “a” के बराबर माना जाता है।

नीचे के उदाहरण में, InStr 0 लौटाता है क्योंकि यह “Fragile items” के अंदर “fragile” (लोअरकेस) ढूँढ रहा है।

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
    
    MsgBox result

End Sub

हालाँकि, vbTextCompare का उपयोग करने पर वही खोज केस को नज़रअंदाज़ करती है और 1 लौटाती है।

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbTextCompare)
    
    MsgBox result

End Sub

Start पोज़िशन के साथ VBA InStr

कभी-कभी आप स्ट्रिंग की शुरुआत से खोज शुरू नहीं करना चाहते। start आर्ग्यूमेंट VBA को बताता है कि खोज कहाँ से शुरू करनी है।

नीचे के उदाहरण में, start आर्ग्यूमेंट 10 पर सेट है, इसलिए VBA पहली के बजाय 10वें अक्षर से खोज शुरू करता है। इसके बाद यह स्ट्रिंग में आगे "delivery" ढूँढ लेता है।

Sub CheckUrgent()

    Dim result As Integer
    
    result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
    
    MsgBox result

End Sub

उपरोक्त उदाहरण का परिणाम 31 है, जो वह स्थिति है जहाँ "delivery" शुरू होता है।

यह तरीका तब उपयोगी है जब आपको किसी चीज़ की दूसरी घटना चाहिए या दोहराए जाने वाले पैटर्न पर काम करते समय किसी ज्ञात प्रीफ़िक्स को नज़रअंदाज़ करना हो।

VBA InStr बनाम InStrRev

जैसा कि आपने सीखा, InStr बाएँ से दाएँ खोजता है। जबकि InStrRev दाएँ से बाएँ खोजता है।

उदाहरण के लिए, हमने ईमेल में आखिरी डॉट खोजने के लिए InStrRev का उपयोग किया है। परिणाम 18 है, जो “com” से पहले वाले डॉट की स्थिति है।

Sub CheckChr()

    Dim result As Integer
    
    result = InStrRev("john.jacobs@email.com", ".")
    
    MsgBox result

End Sub

जब आपको किसी चीज़ की आखिरी घटना चाहिए या आप फ़ाइल नामों, ईमेल्स, या पाथ्स के साथ काम कर रहे हों, तब InStrRev ज़्यादा उपयोगी लगेगा।

VBA InStr के आम उपयोग

अब जब हमने देखा कि VBA InStr फ़ंक्शन कैसे काम करता है, तो इसके आम उपयोग मामलों पर नज़र डालते हैं।

जाँचें कि किसी सेल में कोई कीवर्ड है या नहीं

मान लीजिए आपके पास ग्राहक आदेशों का डेटासेट है, और आपको विशेष हैंडलिंग के लिए ऑर्डर फ़्लैग करने हैं। कोड OrderNotes कॉलम को देखता है और “noon” वाले किसी भी नोट को फ़्लैग करता है।

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
            ' Logic to mark as "Morning Delivery"
        End If
        
    Next i

End Sub

ईमेल-जैसे टेक्स्ट को वैलिडेट करें

आप InStr फ़ंक्शन का उपयोग तेज़ी से वैध ईमेल फ़ॉर्मैट जाँचने के लिए भी कर सकते हैं। उदाहरण के लिए, नीचे का कोड जाँचता है कि ईमेल में @ है और कॉलम 6 में “Valid Email Format” लौटाता है।

Sub ValidateEmail()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(Cells(i, 3).Value, "@") > 0 Then
            Cells(i, 6).Value = "Valid Email Format"
        End If
        
    Next i

End Sub

कॉमा या हाइफ़न जैसे सेपरेटर्स का पता लगाना

आप InStr फ़ंक्शन का उपयोग यह जाँचने के लिए कर सकते हैं कि किसी टेक्स्ट में हाइफ़न, कॉमा, या स्लैश है या नहीं। नीचे के उदाहरण में, कोड OrderNotes (कॉलम E) से होकर लूप करता है, जाँचता है कि टेक्स्ट में कॉमा है या नहीं, फिर कॉलम F में परिणाम लिखता है।

Sub ValidateEmail()

    Dim i As Integer
    Dim commaPos As Integer
    Dim OrderNotes As String
    
    For i = 2 To 51
        
        OrderNotes = Cells(i, 5).Value
        
        commaPos = InStr(1, OrderNotes, ",")
        
        ' If a comma exists, mark it
        If commaPos > 0 Then
            Cells(i, 6).Value = "Has comma"
        Else
            Cells(i, 6).Value = "No comma"
        End If
        
    Next i

End Sub

VBA InStr के साथ आम गलतियाँ

भले ही आप अनुभवी डेवलपर हों, InStr फ़ंक्शन के साथ कुछ ऐसी समस्याएँ आ सकती हैं जो आपके कोड को अप्रत्याशित रूप से व्यवहार करने लगती हैं। नीचे वे आम मुद्दे हैं जिनका मैंने सामना किया है और जिन्हें आप कैसे सुलझा सकते हैं:

  • यह भूल जाना कि InStr 1-बेस्ड है: हमेशा याद रखें कि पोज़िशन 1 से शुरू होते हैं, 0 से नहीं। यदि आप Python या JavaScript से आ रहे हैं, तो शुरू में यह अटपटा लग सकता है।

  • InStr को True/False जैसा मान लेना: याद रखें कि InStr True या False नहीं लौटाता। यदि आप कुछ ढूँढना चाहते हैं, तो जाँचें कि परिणाम > 0 है या नहीं।

  • केस सेंसिटिविटी को नज़रअंदाज़ करना: जैसा कि अब आप जानते हैं, InStr डिफ़ॉल्ट रूप से केस-सेंसिटिव है। यदि केस मायने नहीं रखता, तो compare आर्ग्यूमेंट में vbTextCompare बताइए।

  • string1 और string2 गड़बड़ा देना: हमेशा याद रखें कि पहला आर्ग्यूमेंट वह है जहाँ आप खोजते हैं। दूसरा वह है जिसे आप ढूँढ रहे हैं। यदि आप इस तरह खोजते हैं InStr(SearchTerm, FullText), तो आपको हमेशा 0 मिलेगा।

VBA InStr बनाम अन्य VBA स्ट्रिंग फ़ंक्शंस

क्योंकि InStr आमतौर पर दिखाता है कि टेक्स्ट में कोई स्ट्रिंग कहाँ है, आइए इसकी तुलना अन्य स्ट्रिंग फ़ंक्शंस से करें।

InStr बनाम Like

Like ऑपरेटर पैटर्न मैचिंग के लिए इस्तेमाल होता है। उदाहरण के लिए, नीचे का कोड “Fragile” की जाँच करता है, लेकिन * पैटर्न का उपयोग करता है, जिसका मतलब है “पहले या बाद में कुछ भी”।

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If Cells(i, 5).Value Like "*Fragile*" Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

यदि आपको केवल यह जानना है कि कोई टेक्स्ट मौजूद है या नहीं, तो InStr उपयोग करें, और जब जटिल पैटर्न में टेक्स्ट जाँचना हो, तो Like

InStr बनाम Replace

InStr से आप किसी सेल का पूरा मान बदलने का निर्णय ले सकते हैं, जबकि Replace फ़ंक्शन सेल के अंदर विशेष टेक्स्ट बदलता है।

नीचे के उदाहरण में, Replace फ़ंक्शन सीधे टेक्स्ट के अंदर “Fragile” को “Handle Carefully” से बदल देता है।

Sub ReplaceOrder()

    Dim i As Integer
    
    For i = 2 To 51
        Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
    Next i

End Sub

InStr बनाम Mid

Mid फ़ंक्शन स्ट्रिंग से टेक्स्ट निकालने के लिए उपयोग होता है। इसलिए, आप अक्सर Mid को InStr के साथ उपयोग करेंगे—स्थिति मिलने के बाद टेक्स्ट निकालने के लिए। 

नीचे का कोड डेटासेट में ईमेल्स से डोमेन निकालता है। InStr फ़ंक्शन ईमेल में "@" कहाँ आता है यह ढूँढता है, फिर Mid उसके बाद से एक्सट्रैक्शन शुरू करता है। अंत में कोड डोमेन को कॉलम H में लिख देता है।

Sub ExtractDomain()

    Dim i As Integer
    Dim pos As Integer
    Dim domain As String
    
    For i = 2 To 51
        
        pos = InStr(1, Cells(i, 3).Value, "@")
        
        If pos > 0 Then
            domain = Mid(Cells(i, 3).Value, pos + 1)
            Cells(i, 8).Value = domain
        End If
        
    Next i

End Sub

InStr बनाम Split

Split फ़ंक्शन टेक्स्ट को किसी सेपरेटर के आधार पर हिस्सों में बाँटने के लिए उपयोग होता है। 

नीचे के उदाहरण में, कोड कॉलम A की हर पंक्ति पढ़ता है, जाँचता है कि कॉमा है या नहीं, और फिर टेक्स्ट को दो भागों में बाँट देता है। यह Name → कॉलम B और City → कॉलम C में लिखता है।

Sub SplitTextColumn()

    Dim i As Integer
    Dim lastRow As Integer
    Dim parts As Variant
    Dim text As String
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        
        text = Cells(i, 1).Value
        
        ' Only split if a comma exists
        If InStr(1, text, ",") > 0 Then
            
            parts = Split(text, ",")
            
            Cells(i, 2).Value = parts(0) ' Name
            Cells(i, 3).Value = parts(1) ' City
            
        End If
        
    Next i

End Sub

VBA InStr का उपयोग करने के सर्वोत्तम तरीक़े

अपने VBA में त्रुटियों से बचने के लिए, मैं निम्नलिखित सर्वोत्तम तरीक़े सुझाता/सुझाती हूँ, जिन्होंने मेरा समय बचाया है:

  • जब केस मायने न रखे तो vbTextCompare उपयोग करें: क्योंकि ज़्यादातर वास्तविक डेटा में केसिंग सुसंगत नहीं होती, यदि आप डिफ़ॉल्ट compare argument पर निर्भर करेंगे तो मैच छूट सकते हैं।

  • स्पष्ट लॉजिक के लिए “If” के साथ संयोजित करें: हमेशा कोई वैल्यू लौटाने वाला लॉजिक शामिल करें, क्योंकि InStr अपने आप में सिर्फ़ एक संख्या देता है।

  • > 0 की जाँच करें, सटीक पोज़िशन नहीं—जब तक कि आपको वास्तव में पोज़िशन की ज़रूरत न हो।

  • पार्सिंग को पठनीय रखें। एक ही लाइन में बहुत सारे फ़ंक्शन न ठूँसें।

निष्कर्ष

InStr सरल है, लेकिन आप इसे हर जगह इस्तेमाल करेंगे। यह एक स्ट्रिंग के भीतर दूसरी का स्थान देता है, और वही एक संख्या VBA में कई फैसलों को चलाती है—कुछ मौजूद है या नहीं, कहाँ से निकालना है, और मैक्रो को आगे क्या करना चाहिए। अपने आप में, यह सिर्फ़ सर्च है। Mid, Replace, या Split जैसे फ़ंक्शंस के साथ मिलकर, यह एक ऐसे वर्कफ़्लो का हिस्सा बन जाता है जो सच में काम करवाता है।

हमारा Data Analysis in Excel कोर्स लें ताकि उन्नत एनालिटिक्स में महारत पा सकें। साथ ही हमारा Intermediate Power Query in Excel कोर्स लें ताकि डेटा ट्रांसफ़ॉर्मेशन और M भाषा के उपयोग के बारे में जान सकें।

FAQs

InStr वास्तव में क्या लौटाता है?

यह उस स्थिति को लौटाता है जहाँ मैच शुरू होता है। यदि कुछ नहीं मिला, तो यह 0 लौटाता है।

क्या InStr केस-सेंसिटिव है?

हाँ, InStr डिफ़ॉल्ट रूप से केस-सेंसिटिव है। ”Fragile” और ”fragile” अलग माने जाते हैं। यदि आप केस-सेंसिटिव तुलना नहीं चाहते, तो vbTextCompare का उपयोग करें।

InStr के 1-बेस्ड होने का क्या मतलब है?

किसी स्ट्रिंग का पहला अक्षर स्थिति 1 होता है, 0 नहीं। जब आप परिणाम को अन्य फ़ंक्शंस में उपयोग करते हैं तो यह मायने रखता है।

यदि मानों में से कोई एक Null हो तो क्या होता है?

परिणाम भी Null होगा, 0 नहीं।

InStr और InStrRev में क्या अंतर है?

InStr बाएँ से दाएँ खोजता है, जबकि InStrRev दाएँ से बाएँ शुरू होता है। जब आखिरी घटना मायने रखे, तो बाद वाले का उपयोग करें।

विषय
Excel

DataCamp के साथ सीखें

Track

एक्सेल मूलभूत बातें

16 घंटा
Excel का उपयोग करने के लिए आवश्यक कौशल हासिल करें, डेटा तैयार करने से लेकर फ़ॉर्मूले लिखने और विज़ुअलाइज़ेशन बनाने तक। कोई पूर्व अनुभव आवश्यक नहीं है।
विस्तृत जानकारी देखेंRight Arrow
कोर्स शुरू करें
और देखेंRight Arrow