यह ट्यूटोरियल प्रदर्शित करेगा कि Excel VBA में ढूँढें और बदलें विधियों का उपयोग कैसे करें।
वीबीए खोजें
एक्सेल में उत्कृष्ट बिल्ट-इन है पाना तथा ढूँढें और बदलें उपकरण।
उन्हें शॉर्टकट से सक्रिय किया जा सकता है सीटीआरएल + एफ (ढूंढें) या सीटीआरएल + एच (बदलें) या रिबन के माध्यम से: होम > संपादन > ढूंढें और चुनें.
क्लिक करके विकल्प, आप उन्नत खोज विकल्प देख सकते हैं:
आप VBA का उपयोग करके ढूँढें और बदलें दोनों विधियों को आसानी से एक्सेस कर सकते हैं। ये अंतर्निहित विधियां किसी भी चीज़ से कहीं अधिक तेज़ हैं जो आप स्वयं को वीबीए में लिख सकते हैं।
वीबीए उदाहरण खोजें
ढूँढें कार्यक्षमता प्रदर्शित करने के लिए, हमने पत्रक 1 में निम्नलिखित डेटा सेट बनाया है।
यदि आप साथ चलना चाहते हैं, तो डेटा को अपनी कार्यपुस्तिका में दर्ज करें।
<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>
वीबीए वैकल्पिक पैरामीटर के बिना खोजें
VBA Find विधि का उपयोग करते समय, कई वैकल्पिक पैरामीटर हैं जिन्हें आप सेट कर सकते हैं।
फाइंड मेथड का उपयोग करते समय हम सभी मापदंडों को परिभाषित करने की जोरदार सलाह देते हैं!
यदि आप वैकल्पिक मापदंडों को परिभाषित नहीं करते हैं, तो VBA एक्सेल की फाइंड विंडो में वर्तमान में चयनित मापदंडों का उपयोग करेगा। इसका मतलब है, आप शायद यह नहीं जानते होंगे कि कोड चलाते समय कौन से खोज पैरामीटर का उपयोग किया जा रहा है। खोज को संपूर्ण कार्यपुस्तिका या शीट पर चलाया जा सकता है। यह सूत्रों या मूल्यों की खोज कर सकता है। जानने का कोई तरीका नहीं है, जब तक कि आप मैन्युअल रूप से जांच नहीं करते कि एक्सेल की फाइंड विंडो में वर्तमान में क्या चुना गया है।
सादगी के लिए, हम एक ऐसे उदाहरण के साथ शुरू करेंगे जिसमें कोई वैकल्पिक पैरामीटर परिभाषित नहीं है।
सरल खोज उदाहरण
आइए एक सरल खोज उदाहरण देखें:
123456789 | उप टेस्टफाइंड ()रेंज के रूप में मंद MyRangeMyRange = Sheets("Sheet1").UsedRange.Find ("कर्मचारी") सेट करेंMsgBox MyRange.AddressMsgBox MyRange.ColumnMsgBox MyRange.Rowअंत उप |
यह कोड शीट 1 की प्रयुक्त श्रेणी में "कर्मचारी" की खोज करता है। यदि यह "कर्मचारी" पाता है, तो यह चर MyRange को श्रेणीबद्ध करने के लिए पहली मिली सीमा निर्दिष्ट करेगा।
इसके बाद, संदेश बॉक्स पाए गए टेक्स्ट के पते, कॉलम और पंक्ति के साथ प्रदर्शित होंगे।
इस उदाहरण में, डिफ़ॉल्ट खोज सेटिंग्स का उपयोग किया जाता है (यह मानते हुए कि उन्हें एक्सेल की फाइंड विंडो में नहीं बदला गया है):
- खोज पाठ आंशिक रूप से सेल मान से मेल खाता है (एक सटीक सेल मिलान की आवश्यकता नहीं है)
- खोज केस संवेदी नहीं है।
- केवल एक ही वर्कशीट खोजें
इन सेटिंग्स को विभिन्न वैकल्पिक मापदंडों (नीचे चर्चा की गई) के साथ बदला जा सकता है।
विधि नोट्स खोजें
- Find उस सेल का चयन नहीं करता है जहाँ टेक्स्ट पाया जाता है। यह केवल मिली सीमा की पहचान करता है, जिसे आप अपने कोड में हेरफेर कर सकते हैं।
- ढूँढें विधि केवल पाए गए पहले उदाहरण का पता लगाएगी।
- आप वाइल्डकार्ड (*) का उपयोग कर सकते हैं उदा। 'ई*' के लिए खोजें
कुछ भी नहीं मिला
यदि खोज टेक्स्ट मौजूद नहीं है, तो रेंज ऑब्जेक्ट खाली रहेगा। यह एक बड़ी समस्या का कारण बनता है जब आपका कोड स्थान मान प्रदर्शित करने का प्रयास करता है क्योंकि वे मौजूद नहीं हैं। इसके परिणामस्वरूप एक त्रुटि संदेश आएगा जो आप नहीं चाहते हैं।
सौभाग्य से, आप आईएस ऑपरेटर का उपयोग करके वीबीए के भीतर एक खाली रेंज ऑब्जेक्ट के लिए परीक्षण कर सकते हैं:
1 | MyRange नहीं तो कुछ भी नहीं है |
हमारे पिछले उदाहरण में कोड जोड़ना:
12345678910111213 | सब टेस्टफाइंड ()रेंज के रूप में मंद MyRangeMyRange = Sheets("Sheet1").UsedRange.Find ("कर्मचारी") सेट करेंMyRange नहीं तो कुछ भी नहीं हैMsgBox MyRange.AddressMsgBox MyRange.ColumnMsgBox MyRange.Rowअन्यथासंदेश बॉक्स "नहीं मिला"अगर अंतअंत उप |
पैरामीटर खोजें
अब तक, हमने केवल खोज विधि का उपयोग करने का एक मूल उदाहरण देखा है। हालांकि, आपकी खोज को परिशोधित करने में आपकी सहायता के लिए कई वैकल्पिक पैरामीटर उपलब्ध हैं
पैरामीटर | प्रकार | विवरण | मूल्यों |
क्या | आवश्यक | खोजने के लिए मूल्य | कोई भी डेटा प्रकार जैसे स्ट्रिंग या संख्यात्मक |
बाद में | ऐच्छिक | अपनी खोज शुरू करने के लिए सिंगल सेल संदर्भ | सेल का पता |
यहां देखो | ऐच्छिक | खोज के लिए सूत्रों, मूल्यों, टिप्पणियों का प्रयोग करें | xlमान, xlसूत्र, xlटिप्पणियां |
की ओर देखें | ऐच्छिक | किसी सेल के भाग या पूरे का मिलान करें | xlसंपूर्ण, xlPart |
खोज आदेश | ऐच्छिक | खोज करने का क्रम - पंक्तियाँ या स्तंभ | xlByRows, xlByColummns |
खोज दिशा | ऐच्छिक | अंदर जाने के लिए खोज की दिशा - आगे या पीछे | xlअगला, xlपिछला |
माचिस की डिबिया | ऐच्छिक | खोज केस संवेदी है या नहीं | सही या गलत |
मैचबाइट | ऐच्छिक | केवल तभी उपयोग किया जाता है जब आपने डबल बाइट भाषा समर्थन स्थापित किया हो उदा। चीनी भाषा | सही या गलत |
खोज प्रारूप | ऐच्छिक | सेल के प्रारूप के अनुसार खोजने की अनुमति दें | सही या गलत |
पैरामीटर के बाद और कई मान खोजें
आप उपयोग करते हैं पैरामीटर के बाद अपनी खोज के लिए प्रारंभिक सेल निर्दिष्ट करने के लिए। यह तब उपयोगी होता है जब आपके द्वारा खोजे जा रहे मान के एक से अधिक उदाहरण हों।
यदि किसी खोज को पहले से ही एक मान मिल गया है और आप जानते हैं कि और अधिक मान मिलेंगे, तो आप पहले उदाहरण को रिकॉर्ड करने के लिए 'आफ्टर' पैरामीटर के साथ फाइंड विधि का उपयोग करते हैं और फिर उस सेल को अगली खोज के लिए शुरुआती बिंदु के रूप में उपयोग करते हैं।
आप अपने खोज टेक्स्ट के कई उदाहरण खोजने के लिए इसका उपयोग कर सकते हैं:
123456789101112131415161718192021222324252627282930313233343536 | सब टेस्ट मल्टीपलफाइंड ()रेंज के रूप में मंद MyRange, रेंज के रूप में OldRange, स्ट्रिंग के रूप में FindStr''लाइट एंड हीट' का पहला उदाहरण देखेंMyRange = Sheets("Sheet1").UsedRange.Find ("लाइट एंड हीट") सेट करें'नहीं मिला तो बाहर निकलें'यदि MyRange कुछ नहीं है तो उप से बाहर निकलें'डिस्प्ले फर्स्ट एड्रेस मिला'MsgBox MyRange.Address'रेंज ऑब्जेक्ट की एक कॉपी बनाएं'OldRange सेट करें = MyRange'|" के साथ परिसीमन करने वाली स्ट्रिंग में पता जोड़ें चरित्रFindStr = FindStr और "|" & MyRange.Address'अन्य उदाहरणों की तलाश में सीमा के माध्यम से पुनरावृति'करनाआफ्टर पैरामीटर के रूप में पिछले पाए गए पते का उपयोग करके 'लाइट एंड हीट' खोजेंMyRange = Sheets("Sheet1").UsedRange.Find("Light & Heat", After:=Range(OldRange.Address)) सेट करें।'अगर पता पहले ही मिल गया है तो डू लूप से बाहर निकलें - इससे लगातार लूपिंग बंद हो जाती है'अगर InStr(FindStr, MyRange.Address) तो Do . से बाहर निकलें'नवीनतम पाया पता प्रदर्शित करें'MsgBox MyRange.Address'पते की स्ट्रिंग में नवीनतम पता जोड़ें'FindStr = FindStr और "|" & MyRange.Address'वर्तमान सीमा की एक प्रति बनाएँ'OldRange सेट करें = MyRangeकुंडलीअंत उप |
यह कोड उपयोग की गई सीमा के माध्यम से पुनरावृति करेगा, और हर बार 'लाइट एंड हीट' का उदाहरण मिलने पर पता प्रदर्शित करेगा
ध्यान दें कि कोड तब तक लूप करता रहेगा जब तक कि FindStr में डुप्लीकेट पता नहीं मिल जाता, इस स्थिति में यह Do लूप से बाहर निकल जाएगा।
लुकइन पैरामीटर
आप का उपयोग कर सकते हैं लुकइन पैरामीटर यह निर्दिष्ट करने के लिए कि आप सेल के किस घटक में खोजना चाहते हैं। आप किसी सेल में मान, सूत्र या टिप्पणियाँ निर्दिष्ट कर सकते हैं।
- xlमान - सेल मानों की खोज करता है (गणना के बाद सेल का अंतिम मान)
- xlसूत्र - सेल फॉर्मूला के भीतर ही खोज करता है (जो कुछ भी सेल में दर्ज किया गया है)
- xlटिप्पणियां - सेल नोट्स के भीतर खोजें
- xlटिप्पणियांथ्रेडेड - सेल टिप्पणियों के भीतर खोजें
यह मानते हुए कि कार्यपत्रक पर एक सूत्र दर्ज किया गया है, आप किसी भी सूत्र का पहला स्थान खोजने के लिए इस उदाहरण कोड का उपयोग कर सकते हैं:
12345678910 | सब टेस्टलुकइन ()रेंज के रूप में मंद MyRangeMyRange = Sheets("Sheet1").UsedRange.Find("=", LookIn:=xlFormulas) सेट करें।MyRange नहीं तो कुछ भी नहीं हैMsgBox MyRange.Addressअन्यथासंदेश बॉक्स "नहीं मिला"अगर अंतअंत उप |
यदि 'लुकइन' पैरामीटर xlValues पर सेट किया गया था, तो कोड एक 'नहीं मिला' संदेश प्रदर्शित करेगा। इस उदाहरण में यह B10 लौटाएगा।
लुकएट पैरामीटर का उपयोग करना
NS पैरामीटर देखें यह निर्धारित करता है कि खोज सटीक सेल मिलान की खोज करेगा या खोज मान वाले किसी सेल की खोज करेगा।
- xlसंपूर्ण - खोज मूल्य से मेल खाने के लिए पूरे सेल की आवश्यकता होती है
- xl भाग - खोज स्ट्रिंग के लिए सेल के भीतर खोजें
यह कोड उदाहरण "लाइट" टेक्स्ट वाले पहले सेल का पता लगाएगा। साथ में देखो: = xlPart, यह "लाइट एंड हीट" के लिए एक मैच लौटाएगा।
123456789 | सब टेस्टलुकएट ()रेंज के रूप में मंद MyRangeMyRange = Sheets("Sheet1").UsedRange.Find("light", Lookat:=xlPart) सेट करेंMyRange नहीं तो कुछ भी नहीं हैMsgBox MyRange.Addressअन्यथासंदेश बॉक्स "नहीं मिला"अगर अंतअंत उप |
अगर xlसंपूर्ण सेट किया गया था, तो एक मैच केवल तभी वापस आएगा जब सेल का मान "लाइट" हो।
खोज आदेश पैरामीटर
NS सर्चऑर्डर पैरामीटर यह निर्देश देता है कि पूरी रेंज में खोज कैसे की जाएगी।
- xlपंक्तियाँ - खोज पंक्ति दर पंक्ति की जाती है
- xlXolumns - कॉलम द्वारा खोज की जाती है
123456789 | उप परीक्षण खोज आदेश ()रेंज के रूप में मंद MyRangeMyRange = Sheets("Sheet1").UsedRange.Find("employee", SearchOrder:=xlColumns) सेट करेंMyRange नहीं तो कुछ भी नहीं हैMsgBox MyRange.Addressअन्यथासंदेश बॉक्स "नहीं मिला"अगर अंतअंत उप |
यह प्रभावित करता है कि कौन सा मैच पहले मिलेगा।
वर्कशीट में पहले दर्ज किए गए परीक्षण डेटा का उपयोग करते हुए, जब खोज क्रम कॉलम होता है, तो स्थित सेल A5 होता है। जब खोज आदेश पैरामीटर को xlRows में बदल दिया जाता है, तो स्थित सेल C4
यह महत्वपूर्ण है यदि आपके पास खोज श्रेणी के भीतर डुप्लिकेट मान हैं और आप किसी विशेष कॉलम नाम के तहत पहला उदाहरण खोजना चाहते हैं।
खोजदिशा पैरामीटर
NS खोजदिशा पैरामीटर यह निर्धारित करता है कि खोज किस दिशा में जाएगी - प्रभावी रूप से आगे या पीछे।
- xlअगला - श्रेणी में अगले मिलान मूल्य की खोज करें
- एक्सएलपिछला - श्रेणी में पिछले मिलान मूल्य की खोज करें
दोबारा, यदि खोज श्रेणी के भीतर डुप्लिकेट मान हैं, तो इसका प्रभाव हो सकता है कि कौन सा पहले पाया जाता है।
12345678910 | सब टेस्टसर्चडायरेक्शन ()रेंज के रूप में मंद MyRangeMyRange = Sheets("Sheet1").UsedRange.Find("heat", SearchDirection:=xlPrevious) सेट करेंMyRange नहीं तो कुछ भी नहीं हैMsgBox MyRange.Addressअन्यथासंदेश बॉक्स "नहीं मिला"अगर अंतअंत उप |
परीक्षण डेटा पर इस कोड का उपयोग करते हुए, xlPrevious की खोज दिशा C9 का स्थान लौटाएगी। xlNext पैरामीटर का उपयोग करने से A4 का स्थान वापस आ जाएगा।
अगला पैरामीटर का अर्थ है कि खोज खोज श्रेणी के ऊपरी बाएँ कोने में शुरू होगी और नीचे की ओर काम करेगी। पिछला पैरामीटर का अर्थ है कि खोज खोज श्रेणी के निचले दाएं कोने में शुरू होगी और ऊपर की ओर काम करेगी।
मैचबाइट पैरामीटर
NS मैचबाय पैरामीटर केवल उन भाषाओं के लिए उपयोग किया जाता है जो चीनी, रूसी और जापानी जैसे प्रत्येक वर्ण का प्रतिनिधित्व करने के लिए डबल बाइट का उपयोग करती हैं।
यदि यह पैरामीटर 'ट्रू' पर सेट है तो फाइंड केवल डबल-बाइट वर्णों वाले डबल-बाइट वर्णों से मेल खाएगा। यदि पैरामीटर 'गलत' पर सेट है, तो एक डबल-बाइट वर्ण एकल या डबल-बाइट वर्णों से मेल खाएगा।
खोजफ़ॉर्मेट पैरामीटर
NS SearchFormat पैरामीटर आपको मेल खाने वाले सेल प्रारूपों की खोज करने में सक्षम बनाता है। यह इस्तेमाल किया जा रहा एक विशेष फ़ॉन्ट, या एक बोल्ड फ़ॉन्ट, या एक टेक्स्ट रंग हो सकता है। इस पैरामीटर का उपयोग करने से पहले, आपको एप्लिकेशन का उपयोग करके खोज के लिए आवश्यक प्रारूप सेट करना होगा। FindFormat गुण।
इसका उपयोग कैसे करें इसका एक उदाहरण यहां दिया गया है:
12345678910111213 | उप टेस्टसर्चफॉर्मैट ()रेंज के रूप में मंद MyRangeआवेदन.FindFormat.ClearApplication.FindFormat.Font.Bold = TrueMyRange = Sheets("Sheet1").UsedRange.Find("heat", Searchformat:=True) सेट करेंMyRange नहीं तो कुछ भी नहीं हैMsgBox MyRange.Addressअन्यथासंदेश बॉक्स "नहीं मिला"अगर अंतआवेदन.FindFormat.Clearअंत उप |
इस उदाहरण में, FindFormat संपत्ति एक बोल्ड फ़ॉन्ट देखने के लिए सेट है। फाइंड स्टेटमेंट तब सर्चफॉर्मेट पैरामीटर को ट्रू पर सेट करते हुए 'हीट' शब्द की खोज करता है ताकि फॉन्ट बोल्ड होने पर यह केवल उस टेक्स्ट का एक उदाहरण लौटाएगा।
पहले दिखाए गए नमूना वर्कशीट डेटा में, यह A9 लौटाएगा, जो कि बोल्ड फ़ॉन्ट में 'हीट' शब्द वाला एकमात्र सेल है।
सुनिश्चित करें कि कोड के अंत में FindFormat गुण साफ़ हो गया है। यदि आप ऐसा नहीं करते हैं तो आपकी अगली खोज अभी भी इसे ध्यान में रखेगी और गलत परिणाम देगी।
जहां आप SearchFormat पैरामीटर का उपयोग करते हैं, वहां आप वाइल्डकार्ड (*) को खोज मान के रूप में भी उपयोग कर सकते हैं। इस मामले में यह किसी भी मान को बोल्ड फ़ॉन्ट के साथ खोजेगा:
1 | MyRange = Sheets("Sheet1").UsedRange.Find("*", Searchformat:=True) सेट करें |
एकाधिक पैरामीटर का उपयोग करना
यहां चर्चा किए गए सभी खोज मापदंडों को यदि आवश्यक हो तो एक दूसरे के साथ संयोजन में उपयोग किया जा सकता है।
उदाहरण के लिए, आप 'लुकइन' पैरामीटर को 'मैचकेस' पैरामीटर के साथ जोड़ सकते हैं ताकि आप पूरे सेल टेक्स्ट को देख सकें, लेकिन यह केस-संवेदी है
123456789 | उप परीक्षण एकाधिक पैरामीटर ()रेंज के रूप में मंद MyRangeMyRange = Sheets("Sheet1").UsedRange.Find("Light & Heat", LookAt:=xlWhole, MatchCase:=True) सेट करेंMyRange नहीं तो कुछ भी नहीं हैMsgBox MyRange.Addressअन्यथासंदेश बॉक्स "नहीं मिला"अगर अंतअंत उप |
इस उदाहरण में, कोड A4 लौटाएगा, लेकिन अगर हम केवल टेक्स्ट के एक भाग का उपयोग करते हैं उदा। 'गर्मी', कुछ भी नहीं मिलेगा क्योंकि हम पूरे सेल मूल्य से मेल खाते हैं। साथ ही, मामला मेल नहीं खाने के कारण यह विफल हो जाएगा।
1 | MyRange = Sheets("Sheet1").UsedRange.Find("heat", LookAt:=xlWhole, MatchCase:=True) सेट करें |
एक्सेल वीबीए में बदलें
जैसा कि आप उम्मीद कर सकते हैं, एक्सेल वीबीए में एक बदलें फ़ंक्शन है, जो 'ढूंढें' के समान ही काम करता है लेकिन एक नए मान के साथ सेल स्थान पर मानों को प्रतिस्थापित करता है।
ये वे पैरामीटर हैं जिनका उपयोग आप रिप्लेसमेंट मेथड स्टेटमेंट में कर सकते हैं। ये ठीक उसी तरह से काम करते हैं जैसे फाइंड मेथड स्टेटमेंट के लिए। 'ढूंढें' में एकमात्र अंतर यह है कि आपको एक प्रतिस्थापन पैरामीटर निर्दिष्ट करने की आवश्यकता है।
नाम | प्रकार | विवरण | मूल्यों |
क्या | आवश्यक | खोजने के लिए मूल्य | कोई भी डेटा प्रकार जैसे स्ट्रिंग या संख्यात्मक |
प्रतिस्थापन | आवश्यक | प्रतिस्थापन स्ट्रिंग। | कोई भी डेटा प्रकार जैसे स्ट्रिंग या संख्यात्मक |
की ओर देखें | ऐच्छिक | किसी सेल के भाग या संपूर्ण का मिलान करें | xlPart या xlसंपूर्ण |
खोज आदेश | ऐच्छिक | खोजने का क्रम - पंक्तियाँ या स्तंभ | xlByRows या xlByColumns |
माचिस की डिबिया | ऐच्छिक | खोज केस संवेदी है या नहीं | सही या गलत |
मैचबाइट | ऐच्छिक | केवल तभी उपयोग किया जाता है जब आपने डबल बाइट भाषा समर्थन स्थापित किया हो | सही या गलत |
खोज प्रारूप | ऐच्छिक | सेल के प्रारूप के अनुसार खोजने की अनुमति दें | सही या गलत |
बदलेंफ़ॉर्मेट | ऐच्छिक | विधि के लिए प्रारूप बदलें। | सही या गलत |
प्रारूप बदलें पैरामीटर एक विशेष प्रारूप वाले सेल की खोज करता है उदा। उसी तरह बोल्ड करें जैसे SearchFormat पैरामीटर Find विधि में काम करता है। आपको पहले Application.FindFormat गुण सेट करने की आवश्यकता है, जैसा कि पहले दिखाए गए Find example कोड में दिखाया गया है
वैकल्पिक पैरामीटर के बिना बदलें
इसके सरलतम रूप में, आपको केवल यह निर्दिष्ट करने की आवश्यकता है कि आप क्या खोज रहे हैं और आप इसे किससे बदलना चाहते हैं।
123 | सब टेस्ट रिप्लेस ()शीट्स ("शीट 1")। यूज्डरेंज। रिप्लेस व्हाट: = "लाइट एंड हीट", रिप्लेसमेंट: = "एल एंड एच"अंत उप |
ध्यान दें कि खोज विधि केवल मिलान किए गए मान का पहला उदाहरण लौटाएगी, जबकि प्रतिस्थापन विधि निर्दिष्ट पूरी सीमा के माध्यम से काम करती है और वह सब कुछ बदल देती है जिस पर वह मेल खाता है।
यहां दिखाया गया प्रतिस्थापन कोड 'लाइट एंड हीट' के हर इंस्टेंस को 'एल एंड एच' से बदल देगा, जो यूज्डरेंज ऑब्जेक्ट द्वारा परिभाषित सेल की पूरी श्रृंखला के माध्यम से होगा।
वीबीए टेक्स्ट स्ट्रिंग के भीतर टेक्स्ट ढूंढने या बदलने के लिए वीबीए का उपयोग करना
एक्सेल डेटा के साथ इंटरैक्ट करने के लिए वीबीए का उपयोग करते समय उपरोक्त उदाहरण बहुत अच्छा काम करते हैं। हालांकि, वीबीए स्ट्रिंग्स के साथ बातचीत करने के लिए, आप अंतर्निहित वीबीए फ़ंक्शंस जैसे INSTR और REPLACE का उपयोग कर सकते हैं।
आप का उपयोग कर सकते हैं INSTR फ़ंक्शन एक लंबी स्ट्रिंग के भीतर पाठ की एक स्ट्रिंग का पता लगाने के लिए।
123 | उप टेस्टइंस्ट्र ()MsgBox InStr ("यह MyText स्ट्रिंग है", "MyText")अंत उप |
यह उदाहरण कोड 9 का मान लौटाएगा, जो कि संख्या की स्थिति है जहां खोजी जाने वाली स्ट्रिंग में 'MyText' पाया जाता है।
ध्यान दें कि यह केस सेंसिटिव है। यदि 'माईटेक्स्ट' सभी लोअरकेस है, तो 0 का मान वापस कर दिया जाएगा जिसका अर्थ है कि खोज स्ट्रिंग नहीं मिली थी। नीचे हम चर्चा करेंगे कि केस-सेंसिटिविटी को कैसे निष्क्रिय किया जाए।
INSTR - प्रारंभ
दो और वैकल्पिक पैरामीटर उपलब्ध हैं। आप खोज के लिए प्रारंभ बिंदु निर्दिष्ट कर सकते हैं:
1 | MsgBox InStr(9, "यह MyText स्ट्रिंग है", "MyText") |
प्रारंभ बिंदु को 9 के रूप में निर्दिष्ट किया गया है, इसलिए यह अभी भी 9 लौटाएगा। यदि प्रारंभ बिंदु 10 था, तो यह 0 (कोई मिलान नहीं) लौटाएगा क्योंकि प्रारंभ बिंदु बहुत आगे होगा।
INSTR - केस संवेदनशीलता
आप तुलना पैरामीटर भी सेट कर सकते हैं वीबीबाइनरीतुलना या vbपाठ्य तुलना. यदि आप यह पैरामीटर सेट करते हैं, तो कथन में प्रारंभ पैरामीटर मान होना चाहिए।
- वीबीबाइनरीतुलना - केस-संवेदी (डिफ़ॉल्ट)
- vbपाठ्य तुलना - केस - संवे्दनशील नहीं
1 | MsgBox InStr(1, "यह MyText स्ट्रिंग है", "mytext", vbTextCompare) |
यह कथन अभी भी 9 लौटाएगा, भले ही खोज टेक्स्ट लोअर केस में हो।
केस-सेंसिटिविटी को अक्षम करने के लिए आप अपने कोड मॉड्यूल के शीर्ष पर विकल्प तुलना टेक्स्ट भी घोषित कर सकते हैं।
वीबीए बदलें समारोह
यदि आप अपने कोड के भीतर अलग-अलग टेक्स्ट के साथ स्ट्रिंग में वर्णों को बदलना चाहते हैं, तो इसके लिए बदलें विधि आदर्श है:
123 | सब टेस्ट रिप्लेस ()MsgBox बदलें ("यह MyText स्ट्रिंग है", "MyText", "My Text")अंत उप |
यह कोड 'MyText' को 'My Text' से बदल देता है। ध्यान दें कि खोज स्ट्रिंग केस संवेदी है क्योंकि बाइनरी तुलना डिफ़ॉल्ट है।
आप अन्य वैकल्पिक पैरामीटर भी जोड़ सकते हैं:
- शुरू - प्रारंभिक स्ट्रिंग में स्थिति को परिभाषित करता है जिसे प्रतिस्थापन से शुरू करना है। खोज विधि के विपरीत, यह प्रारंभ पैरामीटर द्वारा परिभाषित वर्ण संख्या से शुरू होने वाली एक छोटी स्ट्रिंग देता है।
- गिनती - किए जाने वाले प्रतिस्थापन की संख्या को परिभाषित करता है। डिफ़ॉल्ट रूप से, बदलें खोज पाठ के प्रत्येक उदाहरण को बदल देगा, लेकिन आप गणना पैरामीटर को 1 पर सेट करके इसे एकल प्रतिस्थापन तक सीमित कर सकते हैं
- तुलना करना - जैसा कि खोज विधि में आप बाइनरी खोज या टेक्स्ट खोज का उपयोग करके निर्दिष्ट कर सकते हैं वीबीबाइनरीतुलना या vbपाठ्य तुलना. बाइनरी केस सेंसिटिव है और टेक्स्ट नॉन केस सेंसिटिव है
1 | MsgBox बदलें ("यह MyText स्ट्रिंग (mytext) है", "MyText", "My Text", 9, 1, vbTextCompare) |
यह कोड 'माई टेक्स्ट स्ट्रिंग (मायटेक्स्ट)' लौटाता है। ऐसा इसलिए है क्योंकि दिया गया प्रारंभ बिंदु 9 है, इसलिए नई लौटाई गई स्ट्रिंग वर्ण 9 से शुरू होती है। केवल पहले 'माईटेक्स्ट' को बदला गया है क्योंकि काउंट पैरामीटर 1 पर सेट है।
प्रतिस्थापन विधि लोगों के नाम जैसे एपोस्ट्रोफ युक्त समस्याओं को हल करने के लिए आदर्श है। ओ'फ्लिन। यदि आप एक स्ट्रिंग मान को परिभाषित करने के लिए सिंगल कोट्स का उपयोग कर रहे हैं और एक एस्ट्रोफ़े है, तो यह एक त्रुटि का कारण होगा क्योंकि कोड एस्ट्रोफ़े को स्ट्रिंग के अंत के रूप में व्याख्या करेगा और शेष स्ट्रिंग को नहीं पहचान पाएगा।
आप एपॉस्ट्रॉफी को कुछ भी नहीं के साथ बदलने के लिए प्रतिस्थापन विधि का उपयोग कर सकते हैं, इसे पूरी तरह से हटा सकते हैं।