वीबीए डिक्शनरी ऑब्जेक्ट्स

VBA डिक्शनरी का उपयोग करना

एक VBA डिक्शनरी एक संग्रह वस्तु के समान तरीके से संचालित होती है, लेकिन इसमें अधिक गुण और विधियाँ होती हैं, और अधिक लचीलापन प्रदान करती हैं

शब्दकोश डेटा को मेमोरी में संग्रहीत करता है और आसानी से हेरफेर किया जा सकता है। कोई ऑटो कैलकुलेशन, बैकग्राउंड बैकअप और स्क्रीन रिफ्रेशिंग की आवश्यकता नहीं है, इसलिए आपका कोड काफी तेजी से चलेगा।

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

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

मुख्य मान आमतौर पर टेक्स्ट या नंबर या दोनों होते हैं। उपयोगकर्ताओं को अक्सर संख्याओं के बजाय कुंजियों के नामों को पाठ के रूप में याद रखना आसान लगता है।

संग्रह वस्तु की तुलना में, संग्रह वस्तु केवल पढ़ी जाती है। इसमें केवल दो विधियाँ हैं (जोड़ें और निकालें) और दो गुण (गणना और आइटम)। एक बार किसी आइटम को संग्रह ऑब्जेक्ट में जोड़ दिया गया है, इसे केवल हटाया जा सकता है, लेकिन संपादित नहीं किया जा सकता है, जो एक बोझिल प्रक्रिया है यदि किसी आइटम के मूल्य को बदलने की आवश्यकता है।

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

डिक्शनरी ऑब्जेक्ट वन-डायमेंशनल है और डेटा टाइप 'वेरिएंट' है, इसलिए इसमें कोई भी डेटा टाइप दर्ज किया जा सकता है उदा। संख्यात्मक, पाठ, दिनांक

VBA डिक्शनरी एक्सेल का मूल नहीं है और डिक्शनरी ऑब्जेक्ट को परिभाषित करते समय इसे जल्दी या देर से बाइंडिंग द्वारा एक्सेस करने की आवश्यकता होती है

123 उप अर्लीबाइंडिंगउदाहरण ()Dim MyDictionary as New Scripting.Dictionaryअंत उप
1234 उप लेट बाइंडिंग उदाहरण ()मंद MyDictionary वस्तु के रूप मेंMyDictionary सेट करें = CreateObject ("Scripting.Dictionary")अंत उप

यदि आप अर्ली बाइंडिंग का उपयोग करते हैं, तो आपको 'माइक्रोसॉफ्ट स्क्रिप्टिंग रनटाइम' लाइब्रेरी में एक संदर्भ जोड़ना होगा

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

'माइक्रोसॉफ्ट स्क्रिप्टिंग रनटाइम' तक नीचे स्क्रॉल करें और उसके आगे वाले बॉक्स पर टिक करें। ओके पर क्लिक करें और यह लाइब्रेरी अब आपके वीबीए प्रोजेक्ट का हिस्सा है और इसे अर्ली बाइंडिंग का उपयोग करके संदर्भित किया जा सकता है। इस आलेख में कोड के सभी उदाहरण अर्ली बाइंडिंग का उपयोग करेंगे।

आपका कोड अर्ली बाइंडिंग के साथ काफी तेजी से चलेगा, क्योंकि यह सब सामने संकलित है। लेट बाइंडिंग के साथ, कोड के चलने पर ऑब्जेक्ट को कंपाइल करना पड़ता है

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

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

एक शब्दकोश युक्त अपने एक्सेल एप्लिकेशन को वितरित करना

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

यह जांचने के लिए कुछ वीबीए कोड शामिल करना एक अच्छा विचार है कि यह पुस्तकालय मौजूद है जब आपका एक्सेल एप्लिकेशन लोड होता है। 'वर्कबुक ओपन' इवेंट में ऐसा करने के लिए आप 'Dir' कमांड का इस्तेमाल कर सकते हैं

फ़ाइल का स्थान है C:\Windows\SysWOW64\scrrun.dll

एक शब्दकोश वस्तु का दायरा

डिक्शनरी ऑब्जेक्ट केवल तभी उपलब्ध होता है जब एक्सेल वर्कबुक खुली हो। कार्यपुस्तिका सहेजे जाने पर यह सहेजा नहीं जाता है।

यदि आपका शब्दकोश आपके मॉड्यूल के सभी रूटीन के लिए उपलब्ध होना है, तो आपको मॉड्यूल के शीर्ष पर डिक्लेयर अनुभाग में इसे (मंद) घोषित करना होगा

यदि आप चाहते हैं कि आपका शब्दकोश आपके पूरे कोड में उपयोग किया जाए तो आप इसे वैश्विक वस्तु के रूप में परिभाषित करते हैं।

1 Global MyDictionary As New Dictionary

आपके शब्दकोश से आबाद और पढ़ना

शुरू करने के लिए, आपको एक शब्दकोश बनाने की जरूरत है, इसे कुछ डेटा के साथ पॉप्युलेट करें, और फिर इसके माध्यम से यह साबित करने के लिए कि डेटा मौजूद है

1234567891011 उप PopulateReadDictionary ()Dim MyDictionary as New Scripting.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30n = 0 के लिए MyDictionary.Count - 1 . के लिएMsgBox MyDictionary.Keys(n) & " " & MyDictionary.Items(n)अगला नंबरअंत उप

यह कोड 'माई डिक्शनरी' नामक एक नई डिक्शनरी ऑब्जेक्ट बनाता है और फिर इसे तीन आइटम्स के साथ पॉप्युलेट करता है। जोड़ें विधि के दो पैरामीटर हैं - कुंजी और आइटम, और वे दोनों आवश्यक हैं

कुंजी और आइटम के लिए डेटा प्रकार दोनों प्रकार के होते हैं इसलिए वे किसी भी प्रकार के डेटा को स्वीकार करेंगे - संख्यात्मक, पाठ, दिनांक, आदि

शब्दकोश में पहला आइटम इस प्रकार जोड़ा जा सकता है:

1 MyDictionary.10 जोड़ें, "MyItem1"

कुंजी और आइटम के बीच मूल्यों को उलट दिया गया है, लेकिन यह अभी भी काम करेगा, हालांकि खोज कुंजी अब 10 हो जाएगी।

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

ध्यान दें कि डिक्शनरी इंडेक्स 0 से शुरू होता है, इसलिए आपको फॉर… नेक्स्ट लूप . में इस्तेमाल होने वाली डिक्शनरी काउंट से 1 घटाना होगा

आप शब्दकोश में मानों को पढ़ने के लिए For… प्रत्येक लूप का भी उपयोग कर सकते हैं:

1234567891011 उप PopulateReadDictionary ()Dim MyDictionary As New Scripting.Dictionary, I As VariantMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30MyDictionary.Keys में प्रत्येक के लिए IMsgBox I और "" और MyDictionary(I)अगला मैंअंत उप

यह कोड प्रत्येक आइटम के माध्यम से पुनरावृति करेगा और आइटम कुंजी और आइटम मान प्रदर्शित करेगा

आइटम इंडेक्स नंबर का उपयोग करना

आप मान पढ़ने के लिए किसी कुंजी या आइटम की अनुक्रमणिका संख्या का उपयोग कर सकते हैं

123456789101112 उप सूचकांक संख्या ()Dim MyDictionary as New Scripting.DictionaryMyDictionary.CompareMode = TextCompareMyDictionary। "आइटम 1", 10 . जोड़ेंMyDictionary। "आइटम 2", 20 . जोड़ेंMyDictionary.Add "Item3", 30MsgBox MyDictionary.Keys(2)MsgBox MyDictionary.Items(1)अंत उप

यह कोड कुंजी 'आइटम 3' को वापस कर देगा क्योंकि इंडेक्स 0 से शुरू होता है, और आइटम वैल्यू 20

आप इंडेक्स नंबरों का उपयोग करके कुंजी या आइटम संग्रह के भीतर अलग-अलग कुंजी या आइटम मानों का उल्लेख कर सकते हैं।

शब्दकोश को छानना

ऐसा करने का कोई सीधा तरीका नहीं है, लेकिन इसे करने के लिए कोड लिखना काफी आसान है:

1234567891011 उप फ़िल्टर डिक्शनरी ()Dim MyDictionary As New Scripting.DictionaryMyDictionary.Add "AAItem1", 10MyDictionary.Add "BBItem2", 20MyDictionary.Add "BBItem3", 30फ़िल्टर में प्रत्येक I के लिए (MyDictionary.Keys, "BB")MsgBox MyDictionary.Item(I)अगला मैंअंत उप

फ़िल्टर मान केवल कुंजी मान की शुरुआत से ही काम करता है। आप फ़िल्टर में वाइल्डकार्ड का उपयोग नहीं कर सकते। यह कोड 'BB' से शुरू होने वाले प्रमुख नामों के साथ दो आइटम मान लौटाएगा

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

किसी कुंजी का आइटम मान बदलना

डिक्शनरी ऑब्जेक्ट का संग्रह पर एक बड़ा फायदा होता है जिसमें आइटम वैल्यू को बदला जा सकता है उदा।

1 MyDictionary("MyItem4") = "40"

संग्रह में, आपको उस प्रविष्टि को हटाना होगा और फिर उसे फिर से बनाना होगा।

यहाँ एक कोड उदाहरण है:

12345678910111213 उप PopulateReadDictionary ()Dim MyDictionary As New Scripting.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30MyDictionary("MyItem2") = "25"MyDictionary("MyItem4") = "40"n = 0 के लिए MyDictionary.Count - 1 . के लिएMsgBox MyDictionary.Keys(n) & " " & MyDictionary.Items(n)अगला नंबरअंत उप

उपरोक्त कोड डिक्शनरी में तीन आइटम सेट करता है, और फिर 'MyItem2' के मान को 20 से 25 तक बदल देता है।

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

यह आसानी से शब्दकोश वस्तु में अखंडता की समस्या पैदा कर सकता है।

यदि कोई कुंजी मौजूद है तो परीक्षण करें

आप जांच सकते हैं कि शब्दकोश में कोई महत्वपूर्ण मान मौजूद है या नहीं

123456789 उप CheckExistsDictionary ()Dim MyDictionary As New Scripting.DictionaryMyDictionary.Add "MyItem1", 10MyDictionary.Add "MyItem2", 20MyDictionary.Add "MyItem3", 30MsgBox MyDictionary.Exists("MyItem8")अंत उप

कोड एक नई डिक्शनरी ऑब्जेक्ट में तीन आइटम जोड़ता है, और फिर एक कुंजी ('MyItem8') के लिए परीक्षण करता है जो डिक्शनरी में नहीं है। यह गलत लौटाता है, लेकिन अगर मौजूदा कुंजियों में से एक का उपयोग किया जाता है, तो यह सच हो जाएगा

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

एक शब्दकोश में एकाधिक मानों का उपयोग करना

एक सरणी के विपरीत, शब्दकोश वस्तु केवल एक आयामी है। यह समस्याएँ पैदा कर सकता है यदि आपके पास कई मान हैं जिन्हें आप एक कुंजी के विरुद्ध रखना चाहते हैं।

इसका एक तरीका यह है कि प्रत्येक मान के बीच में एक सीमांकक वर्ण का उपयोग करके प्रत्येक आइटम मान को संयोजित किया जाए उदा। '|'

12345678910111213141516171819202122232425262728293031323334 उप बहुमान ()'डिक्शनरी ऑब्जेक्ट और वेरिएबल्स बनाएं'Dim MyDictionary as New Scripting.Dictionary, V1 as Integer, V2 as Stringदिनांक के रूप में मंद V3, स्ट्रिंग के रूप में अस्थायी, N के रूप में पूर्णांक'एकाधिक मान प्रदर्शित करने के लिए 3 चरों को पॉप्युलेट करें'वी1 = 5V2 = "एकाधिक मानों का उदाहरण"V3 = "22-जुलाई-2020"'|" का उपयोग करके शब्दकोश में सम्मिलित मान जोड़ें सीमांककMyDictionary.Add "MyMultipleItem", V1 और "|" और V2 और "|" और वी3 और "|"'शब्दकोश से जुड़े हुए शब्दकोश मूल्य को एक चर में कैप्चर करेंTemp = MyDictionary ("MyMultipleItem")'व्यक्तिगत मूल्यों को अलग करने के लिए संयोजित स्ट्रिंग के माध्यम से पुनरावृति'करना'एक सीमांकक की स्थिति का पता लगाएं'एन = इनस्ट्र (अस्थायी, "|")'यदि कोई और सीमांकक नहीं हैं तो बाहर निकलें लूप करेंयदि N = 0 है तो Do . से बाहर निकलें'डिलीमीटर की स्थिति के सापेक्ष टेक्स्ट प्रदर्शित करें' मिलाMsgBox वाम(अस्थायी, N-1)'सीमांकक मिलने के बाद अगले वर्ण में संयोजित स्ट्रिंग को छोटा करेंअस्थायी = मध्य (अस्थायी, एन + 1)कुंडलीअंत उप

इस समस्या को हल करने का एक और तरीका है कि आप मुख्य नामों के लिए अपना खुद का सब-स्क्रिप्टिंग सिस्टम डिज़ाइन करें। कोई कारण नहीं है कि आपको प्रमुख नामों में कोष्ठक और संख्याओं का उपयोग नहीं करना चाहिए

1234567891011 उप बहुमान ()Dim MyDictionary As New Scripting.DictionaryMyDictionary। "एकाधिक (1)", 5 . जोड़ेंMyDictionary.Add "एकाधिक (2)", "एकाधिक मानों का उदाहरण"MyDictionary. "एकाधिक(3)", "22-जुलाई-2020" जोड़ेंएन = 1 से 3 . के लिएMsgBox MyDictionary ("एकाधिक ("और एन और ")")अगला नहींअंत उप

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

आइटम हटाना

आप कुंजी मान के संदर्भ में अलग-अलग आइटम निकाल सकते हैं

1 MyDictionary.Remove ("MyItem2")

ध्यान दें कि क्योंकि कुंजी नाम अद्वितीय हैं, यह केवल एक विशेष कुंजी और आइटम मान को हटा देता है

आप शब्दकोश को पूरी तरह से साफ़ भी कर सकते हैं

1 MyDictionary.RemoveAll

वीबीए में 'निकालें' का उपयोग करने का एक उदाहरण यहां दिया गया है:

12345678910111213141516 उप निकालें मान ()Dim MyDictionary as New Scripting.DictionaryMyDictionary। "आइटम 1", 10 . जोड़ेंMyDictionary। "आइटम 2", 20 . जोड़ेंMyDictionary। "आइटम 3", 30 . जोड़ेंMyDictionary.Remove ("आइटम2")N = 0 के लिए MyDictionary.Count - 1 . के लिएMsgBox MyDictionary.Keys(N) & " " & MyDictionary.Items(N)अगला नहींMyDictionary.RemoveAllMsgBox MyDictionary.Countअंत उप

कोड शब्दकोश में तीन आइटम जोड़ता है, और फिर 'आइटम 2' को हटा देता है। इसके बाद यह साबित करने के लिए शब्दकोश के माध्यम से पुनरावृति करता है कि 'आइटम 2' अब मौजूद नहीं है

अंत में, कोड डिक्शनरी के सभी आइटम्स को हटा देता है और डिक्शनरी काउंट को प्रदर्शित करता है, जो अब शून्य है।

खोजों के लिए केस संवेदनशीलता बदलना

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

ध्यान दें कि यह आपके द्वारा डिक्शनरी ऑब्जेक्ट बनाने के तुरंत बाद कोड में किया जाना चाहिए, लेकिन इससे पहले कि आप डिक्शनरी में कोई डेटा जोड़ें। एक बार तुलना मोड सेट हो जाने के बाद, इसे उस शब्दकोश में नहीं बदला जा सकता है।

12345678910 उप चेंजकेस संवेदनशीलता ()Dim MyDictionary as New Scripting.DictionaryMyDictionary.CompareMode = TextCompareMyDictionary। "आइटम 1", 10 . जोड़ेंMyDictionary। "आइटम 2", 20 . जोड़ेंMyDictionary। "आइटम 3", 30 . जोड़ेंMsgBox MyDictionary.Exists("item2")अंत उप

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

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

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

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

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

शब्दकोश छँटाई

संग्रह वस्तु के साथ, कुंजी या आइटम मानों का उपयोग करके, शब्दकोश को सॉर्ट करने में सक्षम होने के लिए कोई विधि प्रदान नहीं की गई है।

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

यह कोड कुंजी और आइटम मान दोनों को सॉर्ट करेगा

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 सब सॉर्ट माय डिक्शनरी ()Dim MyDictionary As New Dictionaryलंबे समय तक मंद काउंटर'यादृच्छिक क्रम वस्तुओं के साथ शब्दकोश बनाएँ'MyDictionary। "आइटम 5", 5 . जोड़ेंMyDictionary। "आइटम 2", 15 . जोड़ेंMyDictionary.Add "Item4", 11MyDictionary। "आइटम 1", 2 . जोड़ेंMyDictionary.Add "Item3", 19'भविष्य में उपयोग के लिए शब्दकोश में वस्तुओं की संख्या कैप्चर करें'काउंटर = MyDictionary.Count'शीट 1' (कॉलम ए) पर प्रत्येक कुंजी और आइटम को लगातार सेल में कॉपी करने वाले शब्दकोश के माध्यम से पुनरावृत्त करेंN = 0 के लिए MyDictionary.Count - 1 . के लिएशीट्स ("शीट 1")। सेल (एन + 1, 1) = MyDictionary.Keys(N)शीट्स ("शीट 1")। सेल (एन + 1, 2) = MyDictionary.Items (N)अगला नहीं'शीट 1 को सक्रिय करें और डेटा को आरोही क्रम में सॉर्ट करने के लिए एक्सेल सॉर्ट रूटीन का उपयोग करें'पत्रक ("पत्रक 1")। सक्रिय करेंरेंज ("ए 1: बी" और MyDictionary.Count)। चुनेंActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.ClearActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _"A1:A5"), सॉर्टऑन:=xlSortOnValues, ऑर्डर:=xlआरोही, डेटाऑप्शन:= _xlक्रमबद्ध सामान्यActiveWorkbook.Worksheets ("शीट 1") के साथ। सॉर्ट करें.सेटरेंज रेंज ("ए 1: ए 5")हैडर = xlGuess.मैचकेस = झूठाओरिएंटेशन = xlTopToBottom.SortMethod = xlPinYin।लागू करनाके साथ समाप्त करना'शब्दकोश से सभी आइटम साफ़ करेंMyDictionary.RemoveAll'लूप' के लिए संग्रहीत मूल्य (काउंटर) का उपयोग करके सेल मानों को वापस खाली शब्दकोश ऑब्जेक्ट में कॉपी करेंएन = 1 काउंटर के लिएMyDictionary। शीट्स जोड़ें ("शीट 1")। सेल (एन, 1)। वैल्यू, शीट्स ("शीट 1")। सेल (एन, 2)। वैल्यूअगला नहीं'शब्दकोश के माध्यम से पुनरावृति करें ताकि यह साबित हो सके कि आइटम अब किस क्रम में हैंN = 0 के लिए MyDictionary.Count - 1 . के लिएMsgBox MyDictionary.Keys(N) & " " & MyDictionary.Items(N)अगला नहीं'कार्यपत्रक (पत्रक 1) साफ़ करें - यदि आवश्यक हो, तो इसे भी हटा देंशीट्स ("शीट 1")। रेंज (सेल (1, 1), सेल (काउंटर, 2))। साफ़ करेंअंत उप

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

यह तब डाउनलोड की गई श्रेणी को सॉर्ट करता है, कॉलम ए को सॉर्ट फ़ील्ड के रूप में उपयोग करता है। शब्दकोश को पूरी तरह से 'RemoveAll' पद्धति का उपयोग करके साफ़ किया जाता है, और कोड फिर कार्यपत्रक में सेल मानों के माध्यम से उन्हें शब्दकोश में वापस जोड़ता है।

अंत में, कोड डिक्शनरी के माध्यम से पुनरावृति करता है, यह साबित करने के लिए कुंजी और आइटम मान प्रदर्शित करता है कि सॉर्ट ने काम किया है।

सॉर्ट कोड में पैरामीटर बदलकर, डेटा को आइटम मानों के आधार पर सॉर्ट किया जा सकता है।

किसी कार्यपत्रक में कुंजियों की सूची की प्रतिलिपि बनाना

आप निम्न कोड का उपयोग करके सभी प्रमुख मानों की सूची को वर्कशीट में कॉपी कर सकते हैं:

12345678910 उप कॉपीकेलिस्ट ()Dim MyDictionary as New Scripting.DictionaryMyDictionary.CompareMode = TextCompareMyDictionary। "आइटम 1", 10 . जोड़ेंMyDictionary। "आइटम 2", 20 . जोड़ेंMyDictionary। "आइटम 3", 30 . जोड़ेंशीट्स ("शीट 1")। रेंज ("ए 1")। वैल्यू = जॉइन (MyDictionary.Keys, vbLf)अंत उप

यह आपकी वर्कशीट में परिणाम देगा:

आप इस कोड का उपयोग करके एक संपूर्ण शब्दकोश को वर्कशीट में कॉपी कर सकते हैं:

12345678910 वर्कशीट में उप कॉपी ()Dim MyDictionary as New Scripting.DictionaryMyDictionary। "आइटम 1", 10 . जोड़ेंMyDictionary। "आइटम 2", 20 . जोड़ेंMyDictionary। "आइटम 3", 30 . जोड़ेंरेंज ("ए 1")। आकार बदलें (MyDictionary.Count, 1) = वर्कशीट फ़ंक्शन। ट्रांसपोज़ (MyDictionary.Keys)रेंज ("बी 1")। आकार बदलें (MyDictionary.Count, 1) = वर्कशीट फ़ंक्शन। ट्रांसपोज़ (MyDictionary.Items)अंत उप

आपकी वर्कशीट इस तरह दिखेगी:

एक संग्रह के साथ एक शब्दकोश की तुलना करना

शब्दकोश संग्रह से तेज है।

एक संग्रह पहले से ही वीबीए के भीतर है। शब्दकोश को जोड़ने के लिए Microsoft स्क्रिप्टिंग डिक्शनरी के संदर्भ की आवश्यकता होती है या लेट बाइंडिंग का उपयोग करके बनाई गई वस्तु की आवश्यकता होती है

एक संग्रह आइटम केवल एक बार लिखा जा सकता है और कई बार पढ़ा जा सकता है। एक शब्दकोश में, आइटम का मूल्य बदला जा सकता है। संग्रह के साथ, आइटम को हटाना होगा और फिर बदले गए आइटम को वापस जोड़ना होगा।

संग्रह सूचकांक मूल्यों पर काम करता है, जिससे यह पता लगाना मुश्किल हो सकता है कि कौन सा सूचकांक मूल्य कहां है। डिक्शनरी अद्वितीय कुंजी मानों पर काम करती है जिनका उपयोग किसी आइटम का पता लगाने के लिए किया जाता है

किसी एकल आइटम को पुनर्प्राप्त करना एक शब्दकोश की तुलना में एक बड़े संग्रह में धीमा है

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

संग्रह केस-संवेदी होते हैं और इसे बदला नहीं जा सकता। शब्दकोश में, तुलना मोड को केस-सेंसिटिविटी या नॉन-केस-सेंसिटिविटी देने के लिए सेट किया जा सकता है

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

संग्रह में सभी वस्तुओं को हटाने में संग्रह वस्तु को फिर से परिभाषित करना शामिल है। इसके लिए शब्दकोश में 'RemoveAll' पद्धति है।

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

wave wave wave wave wave