एक संग्रह एक ऐसी वस्तु है जिसमें कई समान आइटम होते हैं। संग्रह के भीतर बड़ी संख्या में आइटम होने पर भी इन्हें आसानी से एक्सेस और हेरफेर किया जा सकता है।
एक्सेल वीबीए के साथ पहले से ही अंतर्निहित संग्रह हैं। एक उदाहरण पत्रक संग्रह है। किसी कार्यपुस्तिका के भीतर प्रत्येक कार्यपत्रक के लिए, पत्रक संग्रह में एक आइटम होता है।
बिल्ट-इन संग्रहों में आपके लिए कहीं अधिक गुण और विधियां उपलब्ध हैं, लेकिन ये आपके द्वारा बनाए गए संग्रह में उपलब्ध नहीं हैं।
उदाहरण के लिए, आप किसी विशेष कार्यपत्रक पर जानकारी प्राप्त करने के लिए संग्रह का उपयोग कर सकते हैं। उदाहरण के लिए, आप वर्कशीट का नाम देख सकते हैं और यह भी देख सकते हैं कि यह दिखाई दे रहा है या नहीं। प्रत्येक लूप के लिए उपयोग करके, आप संग्रह में प्रत्येक कार्यपत्रक के माध्यम से पुनरावृति कर सकते हैं।
1234567 | उप टेस्ट वर्कशीट्स ()वर्कशीट के रूप में मंद शशीट्स में प्रत्येक श के लिएMsgBox श.नामMsgBox Sh.Visibleअगला शूअंत उप |
आप इंडेक्स वैल्यू, या वर्कशीट के वास्तविक नाम का उपयोग करके संग्रह में एक विशिष्ट वर्कशीट को भी संबोधित कर सकते हैं:
12 | MsgBox शीट्स(1).नामMsgBox Sheets("Sheet1").Name |
जैसे-जैसे कार्यपत्रक जोड़े या हटाए जाते हैं, वैसे-वैसे पत्रक संग्रह आकार में बढ़ता या घटता जाता है।
ध्यान दें कि वीबीए संग्रह के साथ सूचकांक संख्या 1 से शुरू होती है न कि 0 . से
संग्रह बनाम सरणियाँ
सरणी और संग्रह उनके कार्यों में समान हैं क्योंकि वे दोनों पद्धतियां हैं जो बड़ी मात्रा में डेटा को संग्रहीत करने की अनुमति देती हैं जिसे कोड का उपयोग करके आसानी से संदर्भित किया जा सकता है। हालाँकि, उनके काम करने के तरीके में कई अंतर हैं:
- सरणियाँ बहुआयामी हैं जबकि संग्रह केवल एकल आयाम हैं। आप कई आयामों के साथ एक सरणी को आयाम दे सकते हैं उदा।
1 | Dim MyArray(10, 2) स्ट्रिंग के रूप में |
यह लगभग एक कार्यपत्रक की तरह, 2 स्तंभों के साथ 10 पंक्तियों की एक सरणी बनाता है। एक संग्रह प्रभावी रूप से एक एकल स्तंभ है। सरणी उपयोगी है यदि आपको डेटा की कई वस्तुओं को संग्रहीत करने की आवश्यकता है जो एक दूसरे से संबंधित हैं उदा। नाम और पता। नाम सरणी के पहले आयाम में होगा और दूसरे आयाम में पता होगा।
- जब आप अपनी सरणी को पॉप्युलेट करते हैं, तो आपको सरणी के प्रत्येक तत्व में मान डालने के लिए कोड की एक अलग पंक्ति की आवश्यकता होती है। यदि आपके पास द्वि-आयामी सरणी थी, तो आपको वास्तव में कोड की 2 पंक्तियों की आवश्यकता होगी - पहले कॉलम को संबोधित करने के लिए एक पंक्ति और दूसरे कॉलम को संबोधित करने के लिए एक पंक्ति। संग्रह ऑब्जेक्ट के साथ, आप बस जोड़ें विधि का उपयोग करते हैं ताकि नया आइटम संग्रह में जोड़ा जा सके और अनुक्रमणिका मान स्वचालित रूप से सूट करने के लिए समायोजित हो जाए।
- यदि आपको डेटा के किसी आइटम को हटाने की आवश्यकता है तो यह सरणी में अधिक जटिल है। आप किसी तत्व के मान को रिक्त मान पर सेट कर सकते हैं, लेकिन तत्व अभी भी सरणी के भीतर मौजूद है। यदि आप सरणी के माध्यम से पुनरावृति करने के लिए फॉर नेक्स्ट लूप का उपयोग कर रहे हैं, तो लूप एक रिक्त मान लौटाएगा, जिसे यह सुनिश्चित करने के लिए कोडिंग की आवश्यकता होगी कि रिक्त मान को अनदेखा किया गया है। एक संग्रह में आप जोड़ें या निकालें विधियों का उपयोग करते हैं, और सभी अनुक्रमण और पुन: आकार का स्वचालित रूप से ध्यान रखा जाता है। हटाई गई वस्तु पूरी तरह से गायब हो जाती है। डेटा के एक निश्चित आकार के लिए एरेज़ उपयोगी होते हैं, लेकिन जहां डेटा की मात्रा बदलने के लिए उत्तरदायी होती है, वहां संग्रह बेहतर होता है।
- संग्रह केवल पढ़ने के लिए हैं जबकि सरणी मानों को VBA का उपयोग करके बदला जा सकता है। संग्रह के साथ, आपको पहले बदले जाने वाले मान को हटाना होगा और फिर नए बदले गए मान में जोड़ना होगा।
- किसी सरणी में, आप उन तत्वों के लिए केवल एक डेटा प्रकार का उपयोग कर सकते हैं जो आपके द्वारा सरणी को आयाम देने पर सेट किया जाता है। हालांकि, सरणी में आप कस्टम डेटा प्रकारों का उपयोग कर सकते हैं जिन्हें आपने स्वयं डिज़ाइन किया है। कस्टम डेटा प्रकार का उपयोग करके आपके पास एक बहुत ही जटिल सरणी संरचना हो सकती है जिसके बदले में इसके नीचे कई कस्टम डेटा प्रकार होते हैं। किसी संग्रह में, आप प्रत्येक आइटम के लिए उपयोग डेटा प्रकार के डेटा जोड़ सकते हैं। आपके पास एक संख्यात्मक मान, एक तिथि या एक स्ट्रिंग हो सकती है - संग्रह वस्तु कोई भी डेटा प्रकार लेगी। यदि आपने एक सरणी में एक स्ट्रिंग मान डालने का प्रयास किया है जिसे संख्यात्मक के रूप में आयाम दिया गया था, तो यह एक त्रुटि संदेश उत्पन्न करेगा।
- संग्रह आमतौर पर सरणियों की तुलना में उपयोग करना आसान होता है। कोडिंग के संदर्भ में, जब आप एक संग्रह वस्तु बनाते हैं, तो इसमें केवल दो विधियाँ (जोड़ें और निकालें) और दो गुण (गणना और आइटम) होते हैं, इसलिए वस्तु किसी भी तरह से प्रोग्राम के लिए जटिल नहीं होती है।
- संग्रह डेटा का पता लगाने के लिए कुंजियों का उपयोग कर सकते हैं। सरणी में यह फ़ंक्शन नहीं होता है और विशिष्ट मान खोजने के लिए सरणी के माध्यम से पुनरावृति करने के लिए लूपिंग कोड की आवश्यकता होती है।
- पहली बार बनाए जाने पर किसी सरणी के आकार को परिभाषित करने की आवश्यकता होती है। आपको इस बात का अंदाजा होना चाहिए कि यह कितना डेटा स्टोर करने वाला है। यदि आपको सरणी के आकार को बढ़ाने की आवश्यकता है तो आप इसे फिर से आकार देने के लिए 'ReDim' का उपयोग कर सकते हैं, लेकिन यदि आप सरणी में पहले से मौजूद डेटा को खोना नहीं चाहते हैं तो आपको 'संरक्षित' कीवर्ड का उपयोग करने की आवश्यकता है। संग्रह आकार को परिभाषित करने की आवश्यकता नहीं है। जैसे ही आइटम जोड़े या निकाले जाते हैं, यह स्वचालित रूप से बढ़ता और सिकुड़ता है।
संग्रह वस्तु का दायरा
कार्यक्षेत्र के संदर्भ में, संग्रह वस्तु केवल तभी उपलब्ध होती है जब कार्यपुस्तिका खुली हो। कार्यपुस्तिका सहेजे जाने पर यह सहेजा नहीं जाता है। यदि कार्यपुस्तिका को फिर से खोला जाता है तो संग्रह को VBA कोड का उपयोग करके फिर से बनाने की आवश्यकता होती है।
यदि आप चाहते हैं कि आपका संग्रह आपके कोड मॉड्यूल में सभी कोड के लिए उपलब्ध हो, तो आपको मॉड्यूल विंडो के शीर्ष पर डिक्लेयर अनुभाग में संग्रह ऑब्जेक्ट को घोषित करने की आवश्यकता है
यह सुनिश्चित करेगा कि उस मॉड्यूल के भीतर आपके सभी कोड संग्रह तक पहुंच सकते हैं। यदि आप चाहते हैं कि आपकी कार्यपुस्तिका में कोई मॉड्यूल संग्रह तक पहुँचे, तो इसे एक वैश्विक वस्तु के रूप में परिभाषित करें
1 | नए संग्रह के रूप में वैश्विक MyCollection |
संग्रह बनाना, आइटम जोड़ना और आइटम एक्सेस करना
निम्नलिखित कोड का उपयोग करके वीबीए में एक साधारण संग्रह वस्तु बनाई जा सकती है:
123456 | उप निर्माण चयन ()नए संग्रह के रूप में मंद MyCollectionMyCollection.Add "Item1"MyCollection.Add "Item2"MyCollection.Add "Item3"अंत उप |
कोड आयाम एक नई वस्तु जिसे 'माईकोलेक्शन' कहा जाता है और फिर कोड की निम्नलिखित पंक्तियाँ 3 नए मानों में जोड़ने के लिए ऐड विधि का उपयोग करती हैं।
फिर आप मूल्यों तक पहुँचने के लिए अपने संग्रह के माध्यम से पुनरावृति करने के लिए कोड का उपयोग कर सकते हैं
123 | MyCollection में प्रत्येक आइटम के लिएसंदेशबॉक्स आइटमअगला आइटम |
आप फॉर नेक्स्ट लूप का उपयोग करके अपने संग्रह के माध्यम से भी पुनरावृति कर सकते हैं:
123 | n = 1 के लिए MyCollection.Count . के लिएMsgBox MyCollection(n)अगला नंबर |
कोड को काउंट प्रॉपर्टी का उपयोग करके संग्रह का आकार मिलता है और फिर इसका उपयोग प्रत्येक आइटम को इंडेक्स करने के लिए 1 मान से शुरू होता है
प्रत्येक लूप के लिए अगला लूप की तुलना में तेज़ है लेकिन यह केवल एक दिशा में काम करता है (निम्न अनुक्रमणिका से उच्च)। फॉर नेक्स्ट लूप का यह फायदा है कि आप एक अलग दिशा (उच्च सूचकांक से निम्न) का उपयोग कर सकते हैं और आप वेतन वृद्धि को बदलने के लिए चरण विधि का भी उपयोग कर सकते हैं। यह तब उपयोगी होता है जब आप कई वस्तुओं को हटाना चाहते हैं क्योंकि आपको संग्रह के अंत से प्रारंभ तक विलोपन को चलाने की आवश्यकता होगी क्योंकि विलोपन होने पर सूचकांक बदल जाएगा।
संग्रह में जोड़ें विधि में 3 वैकल्पिक पैरामीटर हैं - कुंजी, पहले और बाद में
आप संग्रह में पहले से मौजूद अन्य वस्तुओं के सापेक्ष अपने नए आइटम की स्थिति को परिभाषित करने के लिए 'पहले' और 'बाद' पैरामीटर का उपयोग कर सकते हैं
यह उस इंडेक्स नंबर को निर्दिष्ट करके किया जाता है जिसे आप चाहते हैं कि आपका नया आइटम सापेक्ष हो।
123456 | उप निर्माण चयन ()नए संग्रह के रूप में मंद MyCollectionMyCollection.Add "Item1"MyCollection.Add "Item2", , 1MyCollection.Add "Item3"अंत उप |
इस उदाहरण में 'आइटम 2' को संग्रह में पहले अनुक्रमित आइटम से पहले जोड़ने के लिए निर्दिष्ट किया गया है (जो 'आइटम 1' है)। जब आप इस संग्रह के माध्यम से पुनरावृति करते हैं तो सबसे पहले 'आइटम 2' दिखाई देगा, उसके बाद 'आइटम 1' और 'आइटम 3' दिखाई देगा।
जब आप 'पहले' या 'बाद' पैरामीटर निर्दिष्ट करते हैं, तो सूचकांक मूल्य स्वचालित रूप से संग्रह के भीतर समायोजित हो जाता है ताकि 'आइटम 2' 1 का इंडेक्स वैल्यू बन जाए और 'आइटम 1' 2 के इंडेक्स वैल्यू में स्थानांतरित हो जाए।
आप संदर्भ मान जोड़ने के लिए 'कुंजी' पैरामीटर का भी उपयोग कर सकते हैं जिसका उपयोग आप संग्रह आइटम की पहचान करने के लिए कर सकते हैं। ध्यान दें कि एक कुंजी मान एक स्ट्रिंग होना चाहिए और संग्रह के भीतर अद्वितीय होना चाहिए।
1234567 | उप निर्माण चयन ()नए संग्रह के रूप में मंद MyCollectionMyCollection.Add "Item1"MyCollection.Add "Item2", "MyKey"MyCollection.Add "Item3"MsgBox MyCollection("MyKey")अंत उप |
'आइटम 2' को 'माईकी' का 'कुंजी' मान दिया गया है ताकि आप इंडेक्स नंबर (2) के बजाय 'माईके' के मूल्य का उपयोग करके उस आइटम को संदर्भित कर सकें।
ध्यान दें कि 'कुंजी' मान एक स्ट्रिंग मान होना चाहिए। यह कोई अन्य डेटा प्रकार नहीं हो सकता है। ध्यान दें कि संग्रह केवल पढ़ने के लिए है, और इसे सेट करने के बाद आप कुंजी मान को अपडेट नहीं कर सकते हैं। साथ ही, आप यह जांच नहीं सकते हैं कि संग्रह में किसी विशिष्ट आइटम के लिए कोई कुंजी मान मौजूद है या नहीं, या उस कुंजी मान को नहीं देख सकते हैं जो कि एक छोटी सी कमी है।
'कुंजी' पैरामीटर में आपके कोड को और अधिक पठनीय बनाने का अतिरिक्त लाभ है, खासकर यदि इसे किसी सहयोगी को समर्थन के लिए सौंपा जा रहा है, और आपको उस मूल्य को खोजने के लिए पूरे संग्रह के माध्यम से पुनरावृति करने की आवश्यकता नहीं है। कल्पना कीजिए कि यदि आपके पास १०,००० वस्तुओं का संग्रह होता तो एक विशिष्ट वस्तु को संदर्भित करना कितना मुश्किल होता!
संग्रह से किसी आइटम को हटाना
आप अपने संग्रह से आइटम हटाने के लिए 'निकालें' पद्धति का उपयोग कर सकते हैं।
1 | MyCollection.Remove (2) |
दुर्भाग्य से, यह आसान नहीं है यदि संग्रह में उस आइटम की अनुक्रमणिका निकालने के लिए बड़ी संख्या में आइटम हैं जिसे आप हटाना चाहते हैं। यह वह जगह है जहां संग्रह बनाते समय 'कुंजी' पैरामीटर काम आता है
1 | MyCollection.Remove ("माईकी") |
जब किसी आइटम को संग्रह से हटा दिया जाता है तो इंडेक्स मान संग्रह के माध्यम से सभी तरह से स्वचालित रूप से रीसेट हो जाते हैं। यह वह जगह है जहां 'कुंजी' पैरामीटर बहुत उपयोगी होता है जब आप एक साथ कई आइटम हटा रहे होते हैं। उदाहरण के लिए, आप आइटम इंडेक्स 105 को हटा सकते हैं, और तुरंत आइटम इंडेक्स 106 इंडेक्स 105 बन जाता है, और इस आइटम के ऊपर की हर चीज का इंडेक्स वैल्यू नीचे चला जाता है। यदि आप कुंजी पैरामीटर का उपयोग करते हैं, तो इस बारे में चिंता करने की कोई आवश्यकता नहीं है कि किस इंडेक्स मान को निकालने की आवश्यकता है।
सभी संग्रह आइटम को हटाने और एक नया संग्रह बनाने के लिए, आप फिर से डिम स्टेटमेंट का उपयोग करते हैं जो एक खाली संग्रह बनाता है।
1 | नए संग्रह के रूप में मंद MyCollection |
वास्तविक संग्रह वस्तु को पूरी तरह से हटाने के लिए, आप वस्तु को कुछ भी नहीं पर सेट कर सकते हैं
1 | MyCollection सेट करें = कुछ नहीं |
यह तब उपयोगी होता है जब आपके कोड के लिए संग्रह की आवश्यकता नहीं रह जाती है। संग्रह ऑब्जेक्ट को कुछ भी नहीं पर सेट करने से इसके सभी संदर्भ हटा दिए जाते हैं और उस मेमोरी को रिलीज़ कर दिया जाता है जिसका वह उपयोग कर रहा था। यह आपके कोड के निष्पादन की गति पर महत्वपूर्ण प्रभाव डाल सकता है, यदि कोई बड़ी वस्तु स्मृति में बैठी है जिसकी अब आवश्यकता नहीं है।
संग्रह में वस्तुओं की संख्या की गणना करें
आप 'गणना' संपत्ति का उपयोग करके आसानी से अपने संग्रह में वस्तुओं की संख्या का पता लगा सकते हैं
1 | MsgBox MyCollection.Count |
यदि आप संग्रह के माध्यम से पुनरावृति करने के लिए फॉर नेक्स्ट लूप का उपयोग कर रहे थे तो आप इस संपत्ति का उपयोग करेंगे क्योंकि यह आपको सूचकांक संख्या के लिए ऊपरी सीमा प्रदान करेगा।
एक विशिष्ट मूल्य के लिए परीक्षण संग्रह
आप प्रत्येक लूप के लिए का उपयोग करके किसी आइटम के लिए विशिष्ट मान खोजने के लिए संग्रह के माध्यम से पुनरावृति कर सकते हैं
123456789101112 | उप खोज चयन ()नए संग्रह के रूप में मंद MyCollectionMyCollection.Add "Item1"MyCollection.Add "Item2"MyCollection.Add "Item3"MyCollection में प्रत्येक आइटम के लिएअगर आइटम = "आइटम 2" तोMsgBox आइटम और "मिला"अगर अंतअगलाअंत उप |
कोड एक छोटा संग्रह बनाता है, और फिर इसके माध्यम से 'आइटम 2' नामक एक आइटम की तलाश करता है। यदि पाया जाता है तो यह एक संदेश बॉक्स प्रदर्शित करता है कि उसे विशिष्ट आइटम मिल गया है
इस पद्धति की कमियों में से एक यह है कि आप अनुक्रमणिका मान या कुंजी मान तक नहीं पहुंच सकते हैं
यदि आप इसके बजाय फॉर नेक्स्ट लूप का उपयोग करते हैं, तो आप इंडेक्स वैल्यू प्राप्त करने के लिए फॉर नेक्स्ट काउंटर का उपयोग कर सकते हैं, हालांकि आपको अभी भी 'कुंजी' मान नहीं मिल सकता है
123456789101112 | उप खोज चयन ()नए संग्रह के रूप में मंद MyCollectionMyCollection.Add "Item1"MyCollection.Add "Item2"MyCollection.Add "Item3"n = 1 के लिए MyCollection.Count . के लिएअगर MyCollection.Item(n) = "Item2" तोMsgBox MyCollection.Item(n) & "सूचकांक स्थिति पर पाया गया" और nअगर अंतअगला नंबरअंत उप |
फॉर नेक्स्ट काउंटर (एन) इंडेक्स स्थिति प्रदान करेगा
एक संग्रह छँटाई
संग्रह को सॉर्ट करने के लिए कोई अंतर्निहित कार्यक्षमता नहीं है, लेकिन कुछ 'आउट ऑफ द बॉक्स' सोच का उपयोग करके, एक्सेल के वर्कशीट सॉर्टिंग फ़ंक्शन का उपयोग करके कोड को सॉर्ट करने के लिए लिखा जा सकता है। यह कोड वास्तविक छँटाई करने के लिए 'सॉर्टशीट' नामक एक रिक्त कार्यपत्रक का उपयोग करता है।
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | उप क्रमबद्ध चयन ()नए संग्रह के रूप में मंद MyCollectionलंबे समय तक मंद काउंटर'यादृच्छिक ऑर्डर आइटम के साथ संग्रह बनाएं'MyCollection.Add "Item5"MyCollection.Add "Item2"MyCollection.Add "Item4"MyCollection.Add "Item1"MyCollection.Add "Item3"'भविष्य में उपयोग के लिए संग्रह में वस्तुओं की संख्या कैप्चर करें'काउंटर = MyCollection.Count'सॉर्टशीट' (कॉलम ए) पर प्रत्येक आइटम को लगातार सेल में कॉपी करके संग्रह के माध्यम से पुनरावृत्त करेंn = 1 के लिए MyCollection.Count . के लिएशीट्स ("सॉर्टशीट")। सेल (एन, 1) = मायकोलेक्शन (एन)अगला नंबर'सॉर्टशीट को सक्रिय करें और डेटा को आरोही क्रम में सॉर्ट करने के लिए एक्सेल सॉर्ट रूटीन का उपयोग करें'पत्रक ("सॉर्टशीट")। सक्रिय करेंरेंज ("A1: A" और MyCollection.Count)। चुनेंActiveWorkbook.Worksheets("SortSheet")।Sort.SortFields.ClearActiveWorkbook.Worksheets ("सॉर्टशीट")। Sort.SortFields.Add2 कुंजी: = रेंज (_"A1:A5"), सॉर्टऑन:=xlSortOnValues, ऑर्डर:=xlआरोही, डेटाऑप्शन:= _xlक्रमबद्ध सामान्यActiveWorkbook.Worksheets ("सॉर्टशीट") के साथ। सॉर्ट करें.सेटरेंज रेंज ("ए 1: ए 5")हैडर = xlGuess.मैचकेस = झूठाओरिएंटेशन = xlTopToBottom.SortMethod = xlPinYin।लागू करनाके साथ समाप्त करना'संग्रह में सभी आइटम हटाएं - ध्यान दें कि यह फॉर नेक्स्ट लूप उल्टे क्रम में चलता हैn = MyCollection के लिए। 1 चरण -1 के लिए गणना करेंMyCollection.Remove (एन)अगला नंबर'लूप' के लिए संग्रहीत मूल्य (काउंटर) का उपयोग करके सेल मानों को वापस खाली संग्रह ऑब्जेक्ट में कॉपी करेंn = 1 से काउंटर . के लिएMyCollection.Add Sheets("SortSheet"). Cells(n, 1).Valueअगला नंबर'इस क्रम को साबित करने के लिए संग्रह के माध्यम से पुनरावृति करें कि आइटम अब में हैंMyCollection में प्रत्येक आइटम के लिएसंदेशबॉक्स आइटमअगला आइटम'कार्यपत्रक (सॉर्टशीट) साफ़ करें - यदि आवश्यक हो, तो इसे भी हटा देंशीट्स ("सॉर्टशीट")। रेंज (सेल (1, 1), सेल (काउंटर, 1))। साफ़ करेंअंत उप |
यह कोड पहले यादृच्छिक क्रम में जोड़े गए आइटम के साथ एक संग्रह बनाता है। यह तब उन्हें वर्कशीट (सॉर्टशीट) पर पहले कॉलम में कॉपी करता है।
कोड तब कॉलम में डेटा को आरोही क्रम में सॉर्ट करने के लिए एक्सेल सॉर्ट फ़ंक्शन का उपयोग करता है। कोड को अवरोही क्रम में क्रमबद्ध करने के लिए भी संशोधित किया जा सकता है।
इसके बाद फॉर नेक्स्ट लूप का उपयोग करके संग्रह को डेटा से खाली कर दिया जाता है। ध्यान दें कि चरण विकल्प का उपयोग किया जाता है ताकि यह संग्रह के अंत से प्रारंभ तक साफ़ हो जाए। ऐसा इसलिए है क्योंकि जैसे ही यह साफ़ होता है, इंडेक्स मान रीसेट हो जाते हैं, अगर यह शुरुआत से साफ़ हो जाता है, तो यह सही ढंग से साफ़ नहीं होगा (इंडेक्स 2 इंडेक्स 1 बन जाएगा)
अंत में, एक और फॉर नेक्स्ट लूप का उपयोग करके, आइटम मानों को वापस खाली संग्रह में स्थानांतरित कर दिया जाता है
प्रत्येक लूप के लिए आगे यह साबित करता है कि संग्रह अब अच्छे आरोही क्रम में है।
दुर्भाग्य से, यह किसी भी कुंजी मान से संबंधित नहीं है जो मूल रूप से दर्ज किया गया हो सकता है, क्योंकि कुंजी मानों को पढ़ा नहीं जा सकता
एक संग्रह को एक उप / समारोह में पास करना
किसी संग्रह को किसी उप या फ़ंक्शन में उसी तरह पास किया जा सकता है जैसे कोई अन्य पैरामीटर
1 | समारोह MyFunction (संग्रह के रूप में ByRef MyCollection) |
'ByRef' का उपयोग करके संग्रह को पास करना महत्वपूर्ण है। इसका मतलब है कि मूल संग्रह का उपयोग किया जाता है। यदि संग्रह को 'बायवैल' का उपयोग करके पारित किया जाता है तो यह संग्रह की एक प्रति बनाता है जिसके दुर्भाग्यपूर्ण परिणाम हो सकते हैं
यदि 'बायवैल' का उपयोग करके एक प्रतिलिपि बनाई जाती है तो फ़ंक्शन के भीतर संग्रह को बदलने वाली कोई भी चीज़ केवल प्रतिलिपि पर होती है, न कि मूल पर। उदाहरण के लिए, यदि फ़ंक्शन के भीतर, संग्रह में एक नया आइटम जोड़ा जाता है, तो यह मूल संग्रह में दिखाई नहीं देगा, जो आपके कोड में एक बग बनाएगा।
किसी फ़ंक्शन से संग्रह लौटाना
आप किसी फ़ंक्शन से संग्रह को उसी तरह वापस कर सकते हैं जैसे किसी ऑब्जेक्ट को वापस करना। आपको सेट कीवर्ड का उपयोग करना चाहिए
12345 | सब रिटर्नफ्रॉमफंक्शन ()संग्रह के रूप में मंद MyCollectionMyCollection सेट करें = PopulateCollectionMsgBox MyCollection.Countअंत उप |
यह कोड एक सब रूटीन बनाता है जो 'माईकोलेक्शन' नामक ऑब्जेक्ट बनाता है और फिर उस संग्रह को पॉप्युलेट करने के लिए फ़ंक्शन को प्रभावी ढंग से कॉल करने के लिए 'सेट' कीवर्ड का उपयोग करता है। एक बार यह हो जाने के बाद यह 2 वस्तुओं की गिनती दिखाने के लिए एक संदेश बॉक्स प्रदर्शित करता है
1234567 | समारोह PopulateCollection () संग्रह के रूप मेंनए संग्रह के रूप में मंद MyCollectionMyCollection.Add "Item1"MyCollection.Add "Item2"पॉप्युलेट कोलेक्शन सेट करें = MyCollectionअंत समारोह |
फ़ंक्शन PopulateCollection एक नया संग्रह ऑब्जेक्ट बनाता है और इसे 2 आइटमों के साथ पॉप्युलेट करता है। यह तब इस ऑब्जेक्ट को मूल उप रूटीन में बनाए गए संग्रह ऑब्जेक्ट में वापस भेज देता है।
एक संग्रह को एक ऐरे में कनवर्ट करना
आप अपने संग्रह को एक सरणी में बदलना चाह सकते हैं। आप उस डेटा को स्टोर करना चाह सकते हैं जहां इसे बदला और हेरफेर किया जा सकता है। यह कोड एक छोटा संग्रह बनाता है और फिर इसे एक सरणी में स्थानांतरित करता है
ध्यान दें कि संग्रह सूचकांक 1 से शुरू होता है जबकि सरणी सूचकांक 0 से शुरू होता है। जबकि संग्रह में 3 आइटम होते हैं, सरणी को केवल 2 पर आयाम देने की आवश्यकता होती है क्योंकि एक तत्व 0 होता है।
1234567891011121314151617 | उप कन्वर्ट कोलेक्शन टूएरे ()नए संग्रह के रूप में मंद MyCollectionमंद MyArray(2) स्ट्रिंग के रूप मेंMyCollection.Add "Item1"MyCollection.Add "Item2"MyCollection.Add "Item3"n = 1 के लिए MyCollection.Count . के लिएMyArray(n-1) = MyCollection(n)अगला नंबरn = 0 से 2 . के लिएMsgBox MyArray(n)अगला नंबरअंत उप |
एक ऐरे को एक संग्रह में परिवर्तित करना
आप किसी सरणी को संग्रह में बदलना चाह सकते हैं। उदाहरण के लिए, आप एक सरणी तत्व प्राप्त करने के लिए कोड का उपयोग करके डेटा को तेज़ और अधिक सुरुचिपूर्ण तरीके से एक्सेस करना चाह सकते हैं।
ध्यान रखें कि यह केवल सरणी के एकल आयाम के लिए काम करेगा क्योंकि संग्रह में केवल एक आयाम है
123456789101112131415 | उप ConvertArrayIntoCollection ()नए संग्रह के रूप में मंद MyCollectionमंद MyArray(2) स्ट्रिंग के रूप मेंमायअरे (0) = "आइटम 1"MyArray(1) = "आइटम2"MyArray(2) = "आइटम3"n = 0 से 2 . के लिएMyCollection.Add MyArray(n)अगला नंबरMyCollection में प्रत्येक आइटम के लिएसंदेशबॉक्स आइटमअगला आइटमअंत उप |
यदि आप बहु-आयामी सरणी का उपयोग करना चाहते हैं, तो आप सरणी आयामों के बीच एक डिलीमीटर वर्ण का उपयोग करके सरणी के भीतर प्रत्येक पंक्ति के लिए सरणी मानों को एक साथ जोड़ सकते हैं, ताकि संग्रह मान पढ़ते समय, आप प्रोग्रामेटिक रूप से डिलीमीटर वर्ण का उपयोग कर सकें मूल्यों को अलग करें।
आप डेटा को संग्रह में इस आधार पर भी स्थानांतरित कर सकते हैं कि पहले आयाम का मान जोड़ा गया है (इंडेक्स 1), और फिर अगला आयाम मान जोड़ा गया है (इंडेक्स 2) और इसी तरह।
यदि सरणी में 4 आयाम होते हैं, तो संग्रह में प्रत्येक चौथा मान मानों का एक नया सेट होगा।
आप कुंजी के रूप में उपयोग करने के लिए सरणी मान भी जोड़ सकते हैं (बशर्ते कि वे अद्वितीय हों) जो विशिष्ट डेटा का पता लगाने का एक आसान तरीका जोड़ देगा।