VBA स्प्लिट फंक्शन - टेक्स्ट की स्ट्रिंग को ऐरे में विभाजित करें

वीबीए स्प्लिट फंक्शन का उपयोग करना

वीबीए स्प्लिट फ़ंक्शन आपको एक मानक टेक्स्ट स्ट्रिंग के भीतर से घटक भागों को अलग करने की अनुमति देता है जहां प्रत्येक घटक एक विशिष्ट सीमांकक वर्ण का उपयोग करता है उदा। एक अल्पविराम या एक बृहदान्त्र। स्ट्रिंग में सीमांकक खोजने और फिर मान निकालने के लिए कोड लिखने की तुलना में इसका उपयोग करना आसान है।

इसका उपयोग तब किया जा सकता है जब आप कॉमा-सेपरेटेड वैल्यू (सीएसवी फ़ाइल) से एक पंक्ति में पढ़ रहे हों या आपके पास एक मेलिंग पता है जो एक पंक्ति में है, लेकिन आप इसे एकाधिक पंक्तियों के रूप में देखना चाहते हैं।

वाक्यविन्यास है:

1 विभाजित अभिव्यक्ति, सीमांकक [वैकल्पिक], सीमा [वैकल्पिक], तुलना करें [वैकल्पिक]

VBA स्प्लिट फ़ंक्शन में चार पैरामीटर हैं:

  • अभिव्यक्ति - टेक्स्ट की वह स्ट्रिंग जिसे आप विभिन्न भागों में विभाजित करना चाहते हैं।
  • सीमान्तक (वैकल्पिक)- स्ट्रिंग या गैर-मुद्रण योग्य वर्ण - विभाजन के लिए उपयोग किए जाने वाले सीमांकक वर्ण को परिभाषित करता है। यदि कोई सीमांकक वर्ण प्रदान नहीं किया जाता है तो रिक्त स्थान के डिफ़ॉल्ट का उपयोग किया जाता है।
  • सीमा (वैकल्पिक) - संख्या - परिभाषित करता है कि कितने विभाजन किए जाएंगे। यदि रिक्त है, तो सभी उपलब्ध विभाजन स्ट्रिंग के भीतर किए जाएंगे। यदि इसे 1 पर सेट किया जाता है, तो कोई विभाजन नहीं किया जाएगा। मूल रूप से, यह आपको स्ट्रिंग की शुरुआत से शुरू होने वाले मानों की एक विशिष्ट संख्या को अलग करने में सक्षम बनाता है उदा। जहां स्ट्रिंग बहुत लंबी है और आपको केवल पहले तीन विभाजन की आवश्यकता है।
  • तुलना करना (वैकल्पिक) - यदि आपका डिलीमीटर एक टेक्स्ट कैरेक्टर है तो इसका उपयोग यह टॉगल करने के लिए किया जाता है कि डिलीमीटर केस-संवेदी है या नहीं। मान vbBinaryCompare (केस-सेंसिटिव) और vbTextCompare (नो-केस सेंसिटिव) हैं।

स्प्लिट फ़ंक्शन हमेशा एक सरणी देता है।

स्प्लिट फंक्शन का सरल उदाहरण

123456789101112 उप स्प्लिट उदाहरण ()'चर परिभाषित करें'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, मैं संस्करण के रूप में'अंतरिक्ष सीमांकक के साथ नमूना स्ट्रिंग'MyString = "एक दो तीन चार"'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग)'प्रत्येक मान दिखाने के लिए बनाई गई सरणी के माध्यम से पुनरावृति'MyArray में प्रत्येक I के लिएसंदेशबॉक्स Iअगला मैंअंत उप

इस उदाहरण में, कोई सीमांकक निर्दिष्ट नहीं है क्योंकि सभी शब्दों के बीच में एक स्थान है, इसलिए डिफ़ॉल्ट सीमांकक (स्थान) का उपयोग किया जा सकता है।

सरणी का कोई आयाम नहीं है, और इसे एक स्ट्रिंग के रूप में सेट किया गया है। वेरिएबल I, जिसका उपयोग For… Next लूप में किया जाता है, को एक प्रकार के रूप में आयाम दिया जाना चाहिए।

जब यह कोड चलाया जाता है, तो यह चार संदेश बॉक्स दिखाएगा, प्रत्येक विभाजन के लिए एक उदा। एक दो तीन। चार।

ध्यान दें कि यदि स्ट्रिंग में शब्दों के बीच दोहरा स्थान है, तो इसका मूल्यांकन विभाजन के रूप में किया जाएगा, हालांकि इसमें कुछ भी नहीं है। यह वह परिणाम नहीं हो सकता है जिसे आप देखना चाहते हैं।

आप किसी भी डबल स्पेस को सिंगल स्पेस से बदलने के लिए रिप्लेस फंक्शन का उपयोग करके इस समस्या को ठीक कर सकते हैं:

1 MyString = बदलें (MyString, "", "")

एक अनुगामी या अग्रणी स्थान भी खाली विभाजन उत्पन्न करके समस्याएँ पैदा कर सकता है। इन्हें अक्सर देखना बहुत मुश्किल होता है। ट्रिम फ़ंक्शन का उपयोग करके आप इन बाहरी रिक्त स्थान को हटा सकते हैं:

1 माईस्ट्रिंग = ट्रिम (माईस्ट्रिंग)

डिलीमीटर कैरेक्टर के साथ स्प्लिट फंक्शन का उपयोग करना

हम अर्ध-बृहदान्त्र (;) के एक सीमांकक का उपयोग कर सकते हैं। यह अक्सर पतों को अलग करने के लिए ईमेल एड्रेस स्ट्रिंग्स में पाया जाता है। आपके पास एक ईमेल भेजा जा सकता है जिसे कई सहयोगियों के साथ साझा किया गया है और आप अपनी कार्यपत्रक में एक सूची देखना चाहते हैं कि यह किसके पास गया है। आप ईमेल पते को ईमेल 'टू' या 'कॉपी' बॉक्स से और अपने कोड में आसानी से कॉपी कर सकते हैं।

123456789101112131415 उप-विभाजन द्वारा अर्धविराम उदाहरण ()'चर परिभाषित करें'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, मैं संस्करण के रूप में, N के रूप में पूर्णांक'सेमी कोलन डिलीमीटर के साथ नमूना स्ट्रिंग'MyString = "[email protected];[email protected];[email protected];[email protected]"'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग, ";")'वर्कशीट साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सरणी के माध्यम से पुनरावृति'N = 0 से UBound (MyArray) के लिए'प्रत्येक ईमेल पते को वर्कशीट के पहले कॉलम में रखें'रेंज ("ए" और एन + 1)। वैल्यू = मायएरे (एन)अगला नहींअंत उप

ध्यान दें कि एक For… अगला लूप सरणी के माध्यम से पुनरावृति करने के लिए उपयोग किया जाता है। सरणी में पहला तत्व हमेशा शून्य से शुरू होता है, और ऊपरी बाउंड फ़ंक्शन का उपयोग तत्वों की अधिकतम संख्या प्राप्त करने के लिए किया जाता है।

इस कोड को चलाने के बाद आपकी वर्कशीट इस तरह दिखेगी:

स्प्लिट फंक्शन में लिमिट पैरामीटर का उपयोग करना

सीमा पैरामीटर स्ट्रिंग की शुरुआत से विशिष्ट संख्या में विभाजन की अनुमति देता है। दुर्भाग्य से, आप एक प्रारंभिक स्थिति या विभाजन की एक श्रृंखला प्रदान नहीं कर सकते हैं, इसलिए यह काफी बुनियादी है। ऐसा करने के लिए आप एक फ़ंक्शन बनाने के लिए अपना स्वयं का VBA कोड बना सकते हैं, और इसे इस लेख में बाद में समझाया जाएगा।

123456789101112131415 उप स्प्लिटविथलिमिट उदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, मैं संस्करण के रूप में, N के रूप में पूर्णांक'अल्पविराम सीमांकक के साथ नमूना स्ट्रिंग'MyString = "एक, दो, तीन, चार, पांच, छह"'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग, ",", 4)'वर्कशीट साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सरणी के माध्यम से पुनरावृति'N = 0 से UBound (MyArray) के लिए'प्रत्येक विभाजन को वर्कशीट के पहले कॉलम में रखें'रेंज ("ए" और एन + 1)। वैल्यू = मायएरे (एन)अगला नहींअंत उप

इस कोड को चलाने के बाद, आपकी वर्कशीट इस तरह दिखेगी:

केवल पहले तीन विभाजित मान अलग से दिखाए जाते हैं। बाद के तीन मान एक लंबी स्ट्रिंग के रूप में दिखाए जाते हैं और विभाजित नहीं होते हैं।

यदि आप एक सीमा मान चुनते हैं जो एक स्ट्रिंग के भीतर सीमांकक की संख्या से अधिक है, तो यह कोई त्रुटि उत्पन्न नहीं करेगा। स्ट्रिंग को उसके सभी घटक भागों में विभाजित किया जाएगा जैसे कि सीमा मान प्रदान नहीं किया गया था।

स्प्लिट फ़ंक्शन में तुलना पैरामीटर का उपयोग करना

तुलना पैरामीटर निर्धारित करता है कि सीमांकक केस-संवेदी है या नहीं। यह लागू नहीं होता है यदि सीमांकक अल्पविराम, अर्ध-कॉलन या कोलन हैं।

नोट: इसके बजाय, आप पूरे मॉड्यूल के लिए केस-सेंसिटिविटी को खत्म करने के लिए हमेशा अपने मॉड्यूल के शीर्ष पर विकल्प तुलना टेक्स्ट <> रख सकते हैं।

123456789101112131415 उप स्प्लिटबीकंपारे उदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, मैं संस्करण के रूप में, N के रूप में पूर्णांक'X सीमांकक के साथ नमूना स्ट्रिंग'MyString = "OneXTwoXThreexFourXFivexSix"'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (MyString, "X", , vbBinaryCompare)'वर्कशीट साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सरणी के माध्यम से पुनरावृति'N = 0 से UBound (MyArray) के लिए'प्रत्येक विभाजन को वर्कशीट के पहले कॉलम में रखें'रेंज ("ए" और एन + 1)। वैल्यू = मायएरे (एन)अगला नहींअंत उप

इस उदाहरण में, विभाजित होने वाली स्ट्रिंग 'X' वर्ण को एक सीमांकक के रूप में उपयोग करती है। हालांकि, इस स्ट्रिंग में अपर और लोअर केस 'X' कैरेक्टर का मिश्रण होता है। स्प्लिट फ़ंक्शन में तुलना पैरामीटर अपर केस 'X' वर्ण का उपयोग करता है।

यदि तुलना पैरामीटर को vbBinaryCompare पर सेट किया गया है, तो लोअर केस 'x' वर्णों को अनदेखा कर दिया जाएगा और आपकी वर्कशीट इस तरह दिखेगी:

यदि तुलना पैरामीटर को vbTextCompare पर सेट किया गया है, तो लोअर केस 'x' वर्णों का उपयोग स्प्लिट में किया जाएगा और आपकी वर्कशीट इस तरह दिखेगी:

ध्यान दें कि सेल A6 के मान को छोटा कर दिया गया है क्योंकि इसमें लोअर केस 'x' कैरेक्टर है। क्योंकि विभाजन संवेदनशील नहीं है, कोई भी सीमांकक जो उप-स्ट्रिंग का हिस्सा बनता है, एक विभाजन होने का कारण होगा।

टेक्स्ट डिलीमीटर और vbTextCompare का उपयोग करते समय यह ध्यान में रखना एक महत्वपूर्ण बिंदु है। आप आसानी से गलत परिणाम के साथ समाप्त हो सकते हैं।

गैर-मुद्रण योग्य वर्णों का सीमांकक वर्ण के रूप में उपयोग करना

आप गैर-मुद्रण योग्य वर्णों को सीमांकक के रूप में उपयोग कर सकते हैं, जैसे कैरिज रिटर्न (एक लाइन ब्रेक)।

यहां हम कैरिज रिटर्न को निर्दिष्ट करने के लिए vbCr का उपयोग करते हैं <>

123456789101112131415 उप स्प्लिटबायनॉनप्रिंट करने योग्य उदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, मैं संस्करण के रूप में, N के रूप में पूर्णांक'कैरिज रिटर्न डिलीमीटर के साथ नमूना स्ट्रिंग'MyString = "वन" और वीबीसीआर और "टू" और वीबीसीआर और "थ्री" और वीबीसीआर और "फोर" और वीबीसीआर और "फाइव" और वीबीसीआर और "सिक्स"'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (MyString, vbCr, vbTextCompare)'वर्कशीट साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सरणी के माध्यम से पुनरावृति'N = 0 से UBound (MyArray) के लिए'प्रत्येक विभाजन को वर्कशीट के पहले कॉलम में रखें'रेंज ("ए" और एन + 1)। वैल्यू = मायएरे (एन)अगला नहींअंत उप

इस उदाहरण में, एक स्ट्रिंग को वीबीसीआर (कैरिज रिटर्न कैरेक्टर) का उपयोग करके डिलीमीटर के रूप में बनाया गया है।

जब यह कोड चलाया जाता है, तो आपकी वर्कशीट इस तरह दिखेगी:

स्प्लिट को उलटने के लिए ज्वाइन फंक्शन का उपयोग करना

ज्वाइन फ़ंक्शन एक सरणी के सभी तत्वों को फिर से जोड़ देगा, लेकिन एक निर्दिष्ट सीमांकक का उपयोग करके। यदि कोई सीमांकक वर्ण निर्दिष्ट नहीं है, तो एक स्थान का उपयोग किया जाएगा।

123456789101112131415 उप जुड़ें उदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, मैं संस्करण के रूप में, N के रूप में पूर्णांकस्ट्रिंग के रूप में मंद लक्ष्य'अल्पविराम सीमांकक के साथ नमूना स्ट्रिंग'MyString = "एक, दो, तीन, चार, पांच, छह"'MyString को सेल A1 पर रखें'रेंज ("A1")। मान = MyString'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग, ",")'सेमी कोलन डिलीमीटर का उपयोग करके मूल स्ट्रिंग को फिर से बनाने के लिए जॉइन फ़ंक्शन का उपयोग करें'लक्ष्य = शामिल हों (माईअरे, ";")'परिणाम स्ट्रिंग को सेल A2 पर रखें'रेंज ("ए 2")। मान = लक्ष्यअंत उप

यह कोड एक स्ट्रिंग को अल्पविराम सीमांकक के साथ एक सरणी में विभाजित करता है, और अर्ध-बृहदान्त्र सीमांकक का उपयोग करके इसे वापस एक साथ जोड़ता है।

इस कोड को चलाने के बाद आपकी वर्कशीट इस तरह दिखेगी:

सेल A1 में अल्पविराम सीमांकक के साथ मूल स्ट्रिंग है, और सेल A2 में अर्ध-कोलन सीमांकक के साथ नई जुड़ी हुई स्ट्रिंग है।

वर्ड काउंट करने के लिए स्प्लिट फंक्शन का उपयोग करना

यह ध्यान में रखते हुए कि एक्सेल वीबीए में एक स्ट्रिंग वेरिएबल 2 जीबी तक लंबा हो सकता है, आप टेक्स्ट के एक टुकड़े में शब्द गणना करने के लिए स्प्लिट फ़ंक्शन का उपयोग कर सकते हैं। जाहिर है, माइक्रोसॉफ्ट वर्ड इसे स्वचालित रूप से करता है, लेकिन यह एक साधारण टेक्स्ट फ़ाइल या किसी अन्य एप्लिकेशन से कॉपी किए गए टेक्स्ट के लिए उपयोगी हो सकता है।

1234567891011121314 उप संख्याऑफवर्ड्सउदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में'अंतरिक्ष सीमांकक के साथ नमूना स्ट्रिंग'MyString = "एक दो तीन चार पांच छह"'कोई भी डबल स्पेस हटाएं'MyString = बदलें (MyString, "", "")'किसी भी अग्रणी या पिछली जगह को हटा दें'माईस्ट्रिंग = ट्रिम (माईस्ट्रिंग)'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग)'यूबाउंड फ़ंक्शन का उपयोग करके शब्दों की संख्या दिखाएं'MsgBox "शब्दों की संख्या" और UBound(MyArray) + 1अंत उप

इस शब्द गणना कोड के खतरों में से एक यह है कि इसे दोहरे स्थान और अग्रणी और अनुगामी रिक्त स्थान द्वारा फेंका जाएगा। यदि ये मौजूद हैं, तो उन्हें अतिरिक्त शब्दों के रूप में गिना जाएगा, और शब्द गणना गलत के रूप में समाप्त हो जाएगी।

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

अंतिम कोड पंक्ति सरणी की अधिकतम तत्व संख्या प्राप्त करने के लिए UBound फ़ंक्शन का उपयोग करके पाए गए शब्दों की संख्या को प्रदर्शित करती है और फिर इसे 1 से बढ़ाती है। ऐसा इसलिए है क्योंकि पहला सरणी तत्व शून्य से शुरू होता है।

वर्कशीट सेल में एक पते को विभाजित करना

मेल पते अक्सर अल्पविराम सीमांकक के साथ पाठ के लंबे तार होते हैं। आप पते के प्रत्येक भाग को एक अलग सेल में विभाजित करना चाह सकते हैं।

123456789101112131415 उप पता उदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, N पूर्णांक के रूप में'Microsoft Corporation पते के साथ स्ट्रिंग सेट करें'MyString = "Microsoft Corporation, One Microsoft Way, Redmond, WA 98052-6399 USA"'अल्पविराम सीमांकक का उपयोग करके स्ट्रिंग को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग, ",")'वर्कशीट साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सरणी के माध्यम से पुनरावृति'N = 0 से UBound (MyArray) के लिए'प्रत्येक विभाजन को वर्कशीट के पहले कॉलम में रखें'रेंज ("ए" और एन + 1)। वैल्यू = मायएरे (एन)अगला नहींअंत उप

इस कोड को चलाने से पते की प्रत्येक पंक्ति को एक अलग सेल में रखने के लिए अल्पविराम सीमांकक का उपयोग किया जाएगा:

यदि आप केवल ज़िप कोड (अंतिम सरणी तत्व) वापस करना चाहते हैं, तो आप कोड का उपयोग कर सकते हैं:

123456789101112 उप पताज़िपकोड उदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, N पूर्णांक के रूप में, Temp स्ट्रिंग के रूप में'Microsoft Corporation पते के साथ स्ट्रिंग सेट करें'MyString = "Microsoft Corporation, One Microsoft Way, Redmond, WA 98052-6399 USA"'अल्पविराम सीमांकक का उपयोग करके स्ट्रिंग को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग, ",")'वर्कशीट साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सेल A1 पर पिन कोड डालें'रेंज ("ए 1")। वैल्यू = मायएरे (यूबाउंड (माईअरे))अंत उप

यह केवल सरणी में अंतिम तत्व का उपयोग करेगा, जो UBound फ़ंक्शन का उपयोग करके पाया जाता है।

दूसरी ओर, आप एक सेल में सभी पंक्तियों को देखना चाह सकते हैं ताकि उन्हें एक पता लेबल पर मुद्रित किया जा सके:

1234567891011121314151617 उप पता उदाहरण ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में, N पूर्णांक के रूप में, Temp स्ट्रिंग के रूप में'Microsoft Corporation पते के साथ स्ट्रिंग सेट करें'MyString = "Microsoft Corporation, One Microsoft Way, Redmond, WA 98052-6399 USA"'अल्पविराम सीमांकक का उपयोग करके स्ट्रिंग को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग, ",")'वर्कशीट साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सरणी के माध्यम से पुनरावृति'N = 0 से UBound (MyArray) के लिए'प्रत्येक सरणी तत्व और एक पंक्ति फ़ीड वर्ण को एक स्ट्रिंग में रखें'अस्थायी = अस्थायी और MyArray (एन) और vbLfअगला नहीं'स्ट्रिंग को वर्कशीट पर रखें'रेंज ("A1") = Tempअंत उप

यह उदाहरण पहले वाले की तरह ही काम करता है, सिवाय इसके कि यह सभी सरणी तत्वों की एक अस्थायी स्ट्रिंग बनाता है, लेकिन प्रत्येक तत्व के बाद एक लाइन फ़ीड वर्ण सम्मिलित करता है।

कोड चलाने के बाद वर्कशीट इस तरह दिखेगी:

वर्कशीट सेल में स्ट्रिंग को विभाजित करें

आप स्प्लिट ऐरे को वर्कशीट सेल में कॉपी कर सकते हैं <> सिर्फ एक कमांड के साथ:

12345678910 उप कॉपीटोरेंज ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में'अंतरिक्ष सीमांकक के साथ नमूना स्ट्रिंग'MyString = "एक, दो, तीन, चार, पांच, छह"'स्ट्रिंग के घटक भागों को विभाजित करने के लिए स्प्लिट फ़ंक्शन का उपयोग करें'MyArray = स्प्लिट (माईस्ट्रिंग, ",")'सरणी को वर्कशीट में कॉपी करें'रेंज ("ए 1: ए" और यूबाउंड (माईअरे) + 1)। वैल्यू = वर्कशीटफंक्शन। ट्रांसफर (माईअरे)अंत उप

जब यह कोड चलाया गया है, तो आपकी वर्कशीट इस तरह दिखेगी:

किसी दिए गए बिंदु से विभाजन की अनुमति देने के लिए एक नया फ़ंक्शन बनाना

स्प्लिट फ़ंक्शन में सीमा पैरामीटर केवल आपको ऊपरी सीमा निर्दिष्ट करने की अनुमति देता है जहां आप विभाजन को रोकना चाहते हैं। यह हमेशा स्ट्रिंग की शुरुआत से शुरू होता है।

एक समान कार्य करना बहुत उपयोगी होगा जहां आप स्ट्रिंग के भीतर विभाजन के प्रारंभ बिंदु को निर्दिष्ट कर सकते हैं, और उस बिंदु से आप जो विभाजन देखना चाहते हैं उसकी संख्या निर्दिष्ट कर सकते हैं। यह सरणी में अंतिम तत्व के रूप में एक विशाल स्ट्रिंग मान रखने के बजाय, केवल उन विभाजनों को निकालेगा जिन्हें आपने सरणी में निर्दिष्ट किया है।

ऐसा करने के लिए आप आसानी से वीबीए में एक फ़ंक्शन (स्प्लिटस्लाइसर कहा जाता है) बना सकते हैं:

123456789101112131415161718192021222324 फ़ंक्शन स्प्लिटस्लाइसर (स्ट्रिंग के रूप में लक्ष्य, स्ट्रिंग के रूप में डेल, पूर्णांक के रूप में प्रारंभ करें, एन के रूप में पूर्णांक)'सरणी चर बनाएं'मंद MyArray () स्ट्रिंग के रूप में'सीमांकक वर्ण का उपयोग करके प्रारंभ चर का उपयोग करके विभाजन को कैप्चर करेंMyArray = स्प्लिट (लक्ष्य, डेल, प्रारंभ)'जांचें कि क्या प्रारंभ पैरामीटर विभाजन की संख्या से अधिक है - इससे समस्याएं हो सकती हैंयदि प्रारंभ> UBound(MyArray) + 1 तब'त्रुटि प्रदर्शित करें और फ़ंक्शन से बाहर निकलें'MsgBox "प्रारंभ पैरामीटर उपलब्ध विभाजनों की संख्या से अधिक है"स्प्लिटस्लाइसर = मायअरेसमारोह से बाहर निकलेंअगर अंत'अंतिम सरणी तत्व को स्ट्रिंग में रखें'लक्ष्य = मायअरे (यूबाउंड (माईअरे))'एन को सीमा के रूप में उपयोग करके स्ट्रिंग को विभाजित करें'MyArray = स्प्लिट (लक्ष्य, डेल, एन)'जांचें कि शीर्ष सीमा शून्य से अधिक है क्योंकि कोड अंतिम तत्व को हटा देता है'यदि UBound(MyArray) > 0 तब'सरणी के अंतिम तत्व को हटाने के लिए ReDim का उपयोग करें'ReDim MyArray को सुरक्षित रखता है (UBound(MyArray) -1)अगर अंत'नई सरणी लौटाएं'स्प्लिटस्लाइसर = मायअरेअंत समारोह

यह फ़ंक्शन चार मापदंडों के साथ बनाया गया है:

  • लक्ष्य - स्ट्रिंग - यह इनपुट स्ट्रिंग है जिसे आप विभाजित करना चाहते हैं
  • डेल - स्ट्रिंग या गैर-मुद्रण योग्य वर्ण - यह वह सीमांकक वर्ण है जिसका आप उपयोग करते हैं उदा. अल्पविराम, बृहदान्त्र
  • शुरू - संख्या - यह आपके स्लाइस के लिए प्रारंभ विभाजन है
  • एन - संख्या - यह उन विभाजनों की संख्या है जो आप अपने स्लाइस में करना चाहते हैं

इनमें से कोई भी पैरामीटर वैकल्पिक नहीं है या इसमें डिफ़ॉल्ट मान नहीं हैं, लेकिन यदि आप इसे आगे बढ़ाना चाहते हैं तो आप इसे फ़ंक्शन के कोड में काम कर सकते हैं।

फ़ंक्शन स्प्लिट फ़ंक्शन का उपयोग सीमा के रूप में प्रारंभ पैरामीटर का उपयोग करके एक सरणी बनाने के लिए करता है। इसका मतलब है कि सरणी तत्व विभाजन को प्रारंभ पैरामीटर तक रखेंगे, लेकिन शेष स्ट्रिंग अंतिम तत्व होगा, और विभाजित नहीं किया जाएगा।

यह निर्धारित करने के लिए कि यह कौन सा तत्व है, सरणी में अंतिम तत्व UBound फ़ंक्शन का उपयोग करके एक स्ट्रिंग में वापस स्थानांतरित किया जाता है।

फिर स्ट्रिंग को फिर से सरणी में विभाजित किया जाता है, N का उपयोग सीमा चर के रूप में किया जाता है। इसका मतलब है कि स्ट्रिंग के लिए स्थिति N तक विभाजन किया जाएगा, जिसके बाद बाकी स्ट्रिंग सरणी में अंतिम तत्व बनाएगी।

ReDim कथन का उपयोग अंतिम तत्व को हटाने के लिए किया जाता है क्योंकि हम केवल विशिष्ट तत्वों को सरणी में छोड़ना चाहते हैं। ध्यान दें कि संरक्षित पैरामीटर का उपयोग किया जाता है, अन्यथा सरणी में सभी डेटा खो जाएगा।

फिर नई सरणी को उस कोड पर वापस कर दिया जाता है जिससे इसे बुलाया गया था।

ध्यान दें कि कोड 'एरर प्रूफ' है। यूजर्स अक्सर अजीबोगरीब चीजें कर देते हैं जिन पर आपने गौर नहीं किया। उदाहरण के लिए, यदि वे स्ट्रिंग में उपलब्ध स्प्लिट्स की संख्या से अधिक स्टार्ट या एन पैरामीटर के साथ फ़ंक्शन का उपयोग करने का प्रयास करते हैं, तो यह फ़ंक्शन के विफल होने की संभावना है।

कोड को प्रारंभ मान की जांच करने के लिए शामिल किया गया है, और यह भी सुनिश्चित करने के लिए कि एक तत्व है जिसे हटाया जा सकता है जब सरणी पर ReDim कथन का उपयोग किया जाता है।

फ़ंक्शन का परीक्षण करने के लिए कोड यहां दिया गया है:

123456789101112 उप टेस्टस्प्लिट स्लाइसर ()'चर बनाएं'Dim MyArray () स्ट्रिंग के रूप में, MyString स्ट्रिंग के रूप में'अल्पविराम सीमांकक के साथ नमूना स्ट्रिंग परिभाषित करें'MyString = "एक, दो, तीन, चार, पांच, छह, सात, आठ, नौ, दस"'नई सरणी को परिभाषित करने के लिए स्प्लिटस्लाइसर फ़ंक्शन का उपयोग करें'MyArray = स्प्लिटस्लाइसर (माईस्ट्रिंग, ",", 4, 3)'सक्रिय पत्रक साफ़ करें'एक्टिवशीट.यूज्ड रेंज.क्लियर'सरणी को वर्कशीट में कॉपी करें'रेंज ("ए 1: ए" और यूबाउंड (माईअरे) + 1)। वैल्यू = वर्कशीटफंक्शन। ट्रांसफर (माईअरे)अंत उप

इस कोड को चलाएँ और आपकी वर्कशीट इस तरह दिखेगी:

आप साइट के विकास में मदद मिलेगी, अपने दोस्तों के साथ साझा करने पेज

wave wave wave wave wave