Track
यदि आपने कुछ से अधिक 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 जैसा मान लेना: याद रखें कि
InStrTrueया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 दाएँ से बाएँ शुरू होता है। जब आखिरी घटना मायने रखे, तो बाद वाले का उपयोग करें।