वीबीए में, एक सरणी एक एकल चर है जिसमें कई मान हो सकते हैं। कोशिकाओं की श्रेणी की तरह एक सरणी के बारे में सोचें: प्रत्येक सेल एक मान संग्रहीत कर सकता है। सरणी एक-आयामी (एक कॉलम के बारे में सोचें), दो-आयामी (एकाधिक पंक्तियों और स्तंभों के बारे में सोचें), या बहु-आयामी हो सकती हैं। सरणी मानों को सरणी के भीतर उनकी स्थिति (सूचकांक संख्या) द्वारा पहुँचा जा सकता है।
वीबीए ऐरे क्विक शीट
सरणियों
विवरणवीबीए कोडबनाएंडिम एरर(१ से ३) वैरिएंट के रूप मेंगिरफ्तारी (1) = "एक"
गिरफ्तार (2) = "दो"
गिरफ्तारी (3) = "तीन"एक्सेल से बनाएंडिम एरर(१ से ३) वैरिएंट के रूप में
रेंज के रूप में मंद सेल, मैं पूर्णांक के रूप में
मैं = एलबाउंड (गिरफ्तारी)
रेंज में प्रत्येक सेल के लिए ("A1:A3")
मैं = मैं + 1
एआर (i) = सेल.वैल्यू
अगली सेलसभी आइटम पढ़ेंमंद मैं के रूप में Long
I = LBound(arr) के लिए UBound(arr) के लिए
MsgBox गिरफ्तारी (i)
अगला मैंमिटाएंगिरफ्तारी मिटाएंस्ट्रिंग के लिए सरणीमंद नाम स्ट्रिंग के रूप में
नाम = शामिल हों (गिरफ्तारी, ":")आकार बढ़ाएँरेडिम संरक्षित गिरफ्तारी (0 से 100)मूल्य ते करनागिरफ्तारी (1) = 22
वीबीए ऐरे त्वरित उदाहरण
आइए विशिष्टताओं में गोता लगाने से पहले एक पूर्ण उदाहरण देखें:
12345678910 | उप ऐरे उदाहरण ()मंद strNames(1 से 4) स्ट्रिंग के रूप मेंstrNames(1) = "शेली"strNames(2) = "स्टीव"strNames(3) = "नीमा"strNames(4) = "जोस"msgbox strNames(3)अंत उप |
यहां हमने एक-आयामी स्ट्रिंग सरणी बनाई है: आकार चार के साथ strNames (चार मान रख सकते हैं) और चार मान असाइन किए गए हैं। अंत में हम एक संदेश बॉक्स में तीसरा मान प्रदर्शित करते हैं।
इस मामले में, एक ऐरे का उपयोग करने का लाभ छोटा है: चार के बजाय केवल एक चर घोषणा की आवश्यकता होती है।
हालाँकि, आइए एक उदाहरण देखें जो एक सरणी की वास्तविक शक्ति दिखाएगा:
12345678 | उप ArrayExample2 ()मंद strNames(१ से ६००००) स्ट्रिंग के रूप मेंडिम आई ऐज़ लॉन्गमैं = 1 से 60000 . के लिएstrNames(i) = Cells(i, 1).Valueअगला मैंअंत उप |
यहां हमने एक ऐरे बनाया है जिसमें 60,000 मान हो सकते हैं और हमने वर्कशीट के कॉलम ए से सरणी को जल्दी से पॉप्युलेट कर दिया है।
सरणी लाभ? - गति!
आप एक्सेल वर्कशीट के समान एरेज़ के बारे में सोच सकते हैं:
- प्रत्येक सेल (या किसी सरणी में आइटम) का अपना मान हो सकता है
- प्रत्येक सेल (या किसी सरणी में आइटम) को उसकी पंक्ति और स्तंभ स्थिति द्वारा पहुँचा जा सकता है।
- वर्कशीट पूर्व। सेल (1,4)। मान = "पंक्ति 1, कॉलम 4"
- सरणी पूर्व। arrVar(1,4) = "पंक्ति 1, कॉलम 4"
तो Arrays से परेशान क्यों? क्यों न केवल एक्सेल में सेल को सीधे मान पढ़ें और लिखें? एक शब्द: गति!
एक्सेल सेल को पढ़ना/लिखना एक धीमी प्रक्रिया है। Arrays के साथ काम करना बहुत तेज़ है!
एक सरणी बनाएं / घोषित करें (मंद)
नोट: सरणियों में कई "आयाम" हो सकते हैं। चीजों को सरल रखने के लिए, हम केवल एक-आयामी सरणियों के साथ काम करके शुरू करेंगे। बाद में ट्यूटोरियल में हम आपको बहु-आयामी सरणियों से परिचित कराएंगे।
स्टेटिक ऐरे
स्थैतिक सरणियाँ वे सरणियाँ हैं जो आकार नहीं बदल सकती हैं। इसके विपरीत, गतिशील सरणियाँ आकार बदल सकते हैं। उन्हें थोड़ा अलग तरीके से घोषित किया जाता है। सबसे पहले, आइए स्थिर सरणियों को देखें।
नोट: यदि आपकी सरणी आकार में नहीं बदलेगी, तो एक स्थिर सरणी का उपयोग करें।
एक स्थिर सरणी चर घोषित करना नियमित चर घोषित करने के समान ही है, सिवाय इसके कि आपको सरणी के आकार को परिभाषित करना होगा। सरणी के आकार को सेट करने के कई अलग-अलग तरीके हैं।
आप स्पष्ट रूप से किसी सरणी की शुरुआत और समाप्ति स्थिति घोषित कर सकते हैं:
123456789101112 | उप StaticArray1 ()'1,2,3,4 पदों के साथ सरणी बनाता है'डिम arrDemo1(1 से 4) स्ट्रिंग के रूप में'4,5,6,7 पदों के साथ सरणी बनाता है'डिम arrDemo2(4 से 7) जितना लंबा हो'स्थिति 0,1,2,3 के साथ सरणी बनाता है'डिम arrDemo3(0 से 3) जितना लंबा होअंत उप |
या आप केवल सरणी आकार दर्ज कर सकते हैं:
123456 | उप StaticArray2 ()'स्थिति 0,1,2,3 के साथ सरणी बनाता है'मंद arrDemo1(3) स्ट्रिंग के रूप मेंअंत उप |
जरूरी! ध्यान दें कि डिफ़ॉल्ट रूप से, Arrays स्थिति 0 से शुरू होती है। So मंद गिरफ्तारीDemo1(3) 0,1,2,3 पदों के साथ एक सरणी बनाता है।
आप घोषणा कर सकते हैं विकल्प आधार 1 अपने मॉड्यूल के शीर्ष पर ताकि सरणी इसके बजाय स्थिति 1 से शुरू हो:
12345678 | विकल्प आधार 1उप StaticArray3 ()'1,2,3 पदों के साथ सरणी बनाता है'मंद arrDemo1(3) स्ट्रिंग के रूप मेंअंत उप |
हालाँकि, मुझे लगता है कि सरणियों की शुरुआत और अंत की स्थिति को स्पष्ट रूप से घोषित करना बहुत आसान (और कम भ्रमित करने वाला) है।
VBA कोड उदाहरण खोज कर थक गए हैं? ऑटोमैक्रो का प्रयास करें!
गतिशील सरणी
गतिशील सरणियाँ वे सरणियाँ हैं जिनका आकार बदला जा सकता है (या जिनके आकार को परिभाषित करने की आवश्यकता नहीं है)।
डायनेमिक ऐरे घोषित करने के दो तरीके हैं।
भिन्न सरणी
डायनामिक ऐरे घोषित करने का पहला तरीका है टाइप करने के लिए ऐरे को सेट करना प्रकार.
1 | मंद arrVar () प्रकार के रूप में |
के साथ वेरिएंट अराy, आपको सरणी आकार को परिभाषित करने की आवश्यकता नहीं है। आकार स्वचालित रूप से समायोजित हो जाएगा। बस याद रखें कि ऐरे स्थिति 0 से शुरू होता है (जब तक कि आप अपने मॉड्यूल के शीर्ष पर विकल्प बेस 1 नहीं जोड़ते)
12345678910111213 | उप संस्करणअरे ()मंद arrVar () प्रकार के रूप में'मानों को परिभाषित करें (आकार = 0,1,2,3)arrVar = सरणी(1, 2, 3, 4)'मान बदलें (आकार = 0,1,2,3,4)arrVar = Array("1a", "2a", "3a", "4a", "5a")'आउटपुट स्थिति 4 ("5a")MsgBox arrVar(4)अंत उप |
गैर-संस्करण गतिशील सरणी
गैर-संस्करण सरणी के साथ, आपको सरणी को मान निर्दिष्ट करने से पहले सरणी आकार को परिभाषित करना होगा। हालाँकि, सरणी बनाने की प्रक्रिया थोड़ी अलग है:
1234567 | उप डायनामिकअरे 1 ()मंद arrDemo1 () स्ट्रिंग के रूप में'स्थितियों 1,2,3,4' के साथ सरणी का आकार बदलता हैReDim arrDemo1(1 से 4)अंत उप |
सबसे पहले आप सरणी को स्थिर सरणी के समान घोषित करते हैं, सिवाय इसके कि आप सरणी आकार को छोड़ दें:
1 | मंद arrDemo1 () स्ट्रिंग के रूप में |
अब जब आप सरणी आकार सेट करना चाहते हैं तो आप इसका उपयोग करते हैं रेडिम सरणी को आकार देने के लिए आदेश:
12 | 1,2,3,4 पदों के साथ सरणी का आकार बदलता हैReDim arrDemo1(1 से 4) |
ReDim सरणी का आकार बदलता है। ReDim और ReDim Preserve के बीच अंतर के लिए नीचे पढ़ें।
रेडिम बनाम रेडिम संरक्षित
जब आप का उपयोग करते हैं रेडिम आदेश आप सरणी से सभी मौजूदा मान साफ़ करें। इसके बजाय आप उपयोग कर सकते हैं रेडिम प्रिजर्व सरणी मानों को संरक्षित करने के लिए:
12 | 1,2,3,4 पदों के साथ सरणी का आकार बदलता है (मौजूदा मानों को संरक्षित करना)ReDim संरक्षित arrDemo1(1 से 4) |
सरणियों को सरलीकृत घोषित करना
ऊपर सब कुछ पढ़कर आप अभिभूत महसूस कर रहे होंगे। चीजों को सरल रखने के लिए, हम ज्यादातर लेख के बाकी हिस्सों के लिए स्थिर सरणियों के साथ काम करेंगे।
सरणी मान सेट करें
सरणी मान सेट करना बहुत आसान है।
एक स्थिर सरणी के साथ, आपको एक समय में एक, सरणी की प्रत्येक स्थिति को परिभाषित करना होगा:
12345678 | उप ऐरे उदाहरण ()मंद strNames(1 से 4) स्ट्रिंग के रूप मेंstrNames(1) = "शेली"strNames(2) = "स्टीव"strNames(3) = "नीमा"strNames(4) = "जोस"अंत उप |
एक वैरिएंट ऐरे के साथ आप संपूर्ण सरणी को एक पंक्ति के साथ परिभाषित कर सकते हैं (केवल छोटे सरणियों के लिए व्यावहारिक):
123456 | उप ArrayExample_1पंक्ति ()मंद strNames () प्रकार के रूप मेंstrNames = ऐरे ("शेली", "स्टीव", "नीमा", "जोस")अंत उप |
यदि आप किसी ऐसे सरणी स्थान के लिए मान को परिभाषित करने का प्रयास करते हैं जो मौजूद नहीं है, तो आपको एक सबस्क्रिप्ट आउट ऑफ़ रेंज त्रुटि प्राप्त होगी:
1 | strNames(5) = "शैनन" |
नीचे 'एरे को रेंज असाइन करें' अनुभाग में हम आपको दिखाएंगे कि कैसे एक लूप का उपयोग करके सरणियों को बड़ी संख्या में मान जल्दी से असाइन करें।
सरणी मान प्राप्त करें
आप उसी तरह सरणी मान प्राप्त कर सकते हैं। नीचे दिए गए उदाहरण में हम सेल में सरणी मान लिखेंगे:
1234 | रेंज ("A1")। मान = strNames(1)रेंज ("A2")। मान = strNames(2)रेंज ("A3")। मान = strNames(3)रेंज ("ए 4")। मान = strNames (4) |
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
ऐरे को रेंज असाइन करें
किसी ऐरे को रेंज असाइन करने के लिए आप लूप का उपयोग कर सकते हैं:
12345678 | उप रेंज टोअरे ()मंद strNames(१ से ६००००) स्ट्रिंग के रूप मेंडिम आई ऐज़ लॉन्गमैं = 1 से 60000 . के लिएstrNames(i) = Cells(i, 1).Valueअगला मैंअंत उप |
यह सेल A1:A60000 के माध्यम से लूप करेगा, सेल मानों को सरणी में निर्दिष्ट करेगा।
रेंज के लिए आउटपुट ऐरे
या आप किसी श्रेणी को सरणी असाइन करने के लिए लूप का उपयोग कर सकते हैं:
123 | मैं = 1 से 60000 . के लिएसेल (i, 1)। मान = strNames (i)अगला मैं |
यह उल्टा करेगा: कक्षों को सरणी मान असाइन करें A1:A60000
2डी / बहु-आयामी सरणियाँ
अब तक हमने विशेष रूप से एकल-आयामी (1D) सरणियों के साथ काम किया है। हालाँकि, सरणियों में 32 आयाम तक हो सकते हैं।
एक्सेल सेल की एक पंक्ति या कॉलम की तरह एक 1D सरणी के बारे में सोचें, कई पंक्तियों और स्तंभों के साथ एक संपूर्ण एक्सेल वर्कशीट की तरह एक 2D सरणी, और एक 3D सरणी एक संपूर्ण कार्यपुस्तिका की तरह है, जिसमें कई शीट होती हैं जिनमें प्रत्येक में कई पंक्तियाँ और कॉलम होते हैं (आप रूबिक क्यूब की तरह एक 3D सरणी के बारे में भी सोच सकते हैं)।
बहु-आयामी सरणी उदाहरण
अब आइए विभिन्न आयामों के सरणियों के साथ काम करने के उदाहरण प्रदर्शित करें।
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
1डी सरणी उदाहरण
यह प्रक्रिया पिछले सरणी उदाहरणों को एक प्रक्रिया में जोड़ती है, यह दर्शाती है कि आप अभ्यास में सरणी का उपयोग कैसे कर सकते हैं।
1234567891011121314 | उप ArrayEx_1d ()मंद strNames(१ से ६००००) स्ट्रिंग के रूप मेंडिम आई ऐज़ लॉन्ग'ऐरे को मान असाइन करें'मैं = 1 से 60000 . के लिएstrNames(i) = Cells(i, 1).Valueअगला मैं'आउटपुट ऐरे वैल्यू टू रेंज'मैं = 1 से 60000 . के लिएपत्रक ("आउटपुट")। सेल (i, 1)। मान = strNames (i)अगला मैंअंत उप |
2डी सरणी उदाहरण
इस प्रक्रिया में 2D सरणी का एक उदाहरण है:
123456789101112131415161718 | उप ArrayEx_2d ()मंद strNames(१ से ६००००, १ से १०) स्ट्रिंग के रूप मेंडिम आई अस लॉन्ग, जे अस लॉन्ग'ऐरे को मान असाइन करें'मैं = 1 से 60000 . के लिएजे = 1 से 10 . के लिएstrNames(i, j) = Cells(i, j).Valueअगला जेअगला मैं'आउटपुट ऐरे वैल्यू टू रेंज'मैं = 1 से 60000 . के लिएजे = 1 से 10 . के लिएपत्रक ("आउटपुट")। सेल (i, j)। मान = strNames (i, j)अगला जेअगला मैंअंत उप |
3डी सरणी उदाहरण
इस प्रक्रिया में कई शीट के साथ काम करने के लिए एक 3D सरणी का एक उदाहरण है:
12345678910111213141516171819202122 | उप ArrayEx_3d ()मंद strNames(१ से ६००००, १ से १०, १ से ३) स्ट्रिंग के रूप मेंडिम आई अस लॉन्ग, जे अस लॉन्ग, के अस लॉन्ग'ऐरे को मान असाइन करें'कश्मीर = 1 से 3 . के लिएमैं = 1 से 60000 . के लिएजे = 1 से 10 . के लिएstrNames (i, j, k) = पत्रक ("शीट" और k)। कक्ष (i, j)। मानअगला जेअगला मैंअगला के'आउटपुट ऐरे वैल्यू टू रेंज'कश्मीर = 1 से 3 . के लिएमैं = 1 से 60000 . के लिएजे = 1 से 10 . के लिएपत्रक ("आउटपुट" और के)। कोशिकाएं (i, j)। मान = strNames (i, j, k)अगला जेअगला मैंअगला केअंत उप |
सरणी लंबाई / आकार
अब तक, हमने आपको विभिन्न प्रकार के सरणियों से परिचित कराया है और आपको सिखाया है कि सरणियों को कैसे घोषित किया जाए और सरणी मान प्राप्त / सेट किया जाए। आगे हम सरणियों के साथ काम करने के लिए अन्य आवश्यक विषयों पर ध्यान केंद्रित करेंगे।
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
यूबाउंड और एलबाउंड फ़ंक्शंस
किसी सरणी की लंबाई / आकार प्राप्त करने के लिए पहला कदम UBound और LBound फ़ंक्शन का उपयोग करके सरणी की ऊपरी और निचली सीमाएँ प्राप्त करना है:
123456 | उप यूबाउंडएलबाउंड ()मंद strNames(१ से ४) स्ट्रिंग के रूप मेंMsgBox UBound(strNames)MsgBox LBound(strNames)अंत उप |
दोनों को घटाना (और 1 जोड़ना) आपको लंबाई देगा:
1 | GetArrLength = UBound(strNames) - LBound(strNames) + 1 |
सरणी लंबाई समारोह
एकल-आयाम सरणी की लंबाई प्राप्त करने के लिए यहां एक फ़ंक्शन है:
1234567 | सार्वजनिक समारोह GetArrLength (एक संस्करण के रूप में) लंबे समय तकयदि खाली है (ए) तोGetArrLength = 0अन्यथाGetArrLength = UBound(a) - LBound(a) + 1अगर अंतअंत समारोह |
एक 2D सरणी के आकार की गणना करने की आवश्यकता है? हमारा ट्यूटोरियल देखें: ऐरे के आकार की गणना करें।
सरणी के माध्यम से लूप
एक सरणी के माध्यम से लूप करने के दो तरीके हैं। सरणी की संख्या की स्थिति के अनुरूप पूर्णांकों के माध्यम से पहला लूप। यदि आप सरणी आकार जानते हैं तो आप इसे सीधे निर्दिष्ट कर सकते हैं:
12345678910111213 | उप ArrayExample_Loop1 ()मंद strNames(१ से ४) स्ट्रिंग के रूप मेंडिम आई ऐज़ लॉन्गstrNames(1) = "शेली"strNames(2) = "स्टीव"strNames(3) = "नीमा"strNames(4) = "जोस"मैं = 1 से 4 . के लिएMsgBox strNames(i)अगला मैंअंत उप |
हालाँकि, यदि आप सरणी आकार (यदि सरणी गतिशील है) नहीं जानते हैं, तो आप पिछले अनुभाग से LBound और UBound फ़ंक्शन का उपयोग कर सकते हैं:
12345678910111213 | उप ArrayExample_Loop2 ()मंद strNames(१ से ४) स्ट्रिंग के रूप मेंडिम आई ऐज़ लॉन्गstrNames(1) = "शेली"strNames(2) = "स्टीव"strNames(3) = "नीमा"strNames(4) = "जोस"i = LBound(strNames) के लिए UBound(strNames) के लिएMsgBox strNames(i)अगला मैंअंत उप |
प्रत्येक ऐरे लूप के लिए
दूसरी विधि प्रत्येक लूप के लिए है। यह सरणी में प्रत्येक आइटम के माध्यम से लूप करता है:
12345678910111213 | उप ArrayExample_Loop3 ()मंद strNames(१ से ४) स्ट्रिंग के रूप मेंमंद वस्तुstrNames(1) = "शेली"strNames(2) = "स्टीव"strNames(3) = "नीमा"strNames(4) = "जोस"strNames में प्रत्येक आइटम के लिएसंदेशबॉक्स आइटमअगला आइटमअंत उप |
प्रत्येक ऐरे के लिए लूप एक-आयामी सरणियों के अलावा बहु-आयामी सरणियों के साथ काम करेगा।
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
2डी सरणी के माध्यम से लूप
आप बहु-आयामी सरणी के माध्यम से लूप करने के लिए यूबाउंड और एलबाउंड फ़ंक्शंस का भी उपयोग कर सकते हैं। इस उदाहरण में हम एक 2D सरणी के माध्यम से लूप करेंगे। ध्यान दें कि UBound और LBound फ़ंक्शंस आपको यह निर्दिष्ट करने की अनुमति देते हैं कि ऊपरी और निचली सीमा (पहले आयाम के लिए 1, दूसरे आयाम के लिए 2) को खोजने के लिए सरणी का कौन सा आयाम है।
1234567891011121314151617181920 | उप ArrayExample_Loop4 ()मंद strNames(१ से ४, १ से २) स्ट्रिंग के रूप मेंडिम आई अस लॉन्ग, जे अस लॉन्गstrNames(1, 1) = "शेली"strNames(2, 1) = "स्टीव"strNames(3, 1) = "नीमा"strNames(4, 1) = "जोस"strNames(1, 2) = "शेल्बी"strNames(2, 2) = "स्टीवन"strNames(3, 2) = "निमो"strNames(4, 2) = "जेसी"j = LBound(strNames, 2) के लिए UBound(strNames, 2) के लिएi = LBound(strNames, 1) के लिए UBound(strNames, 1) के लिएMsgBox strNames (i, j)अगला मैंअगला जेअंत उप |
अन्य सरणी कार्य
सरणी साफ़ करें
संपूर्ण सरणी को साफ़ करने के लिए, मिटाएँ कथन का उपयोग करें:
1 | strNames मिटाएं |
उपयोग उदाहरण:
12345678910 | उप ऐरे उदाहरण ()मंद strNames(1 से 4) स्ट्रिंग के रूप मेंstrNames(1) = "शेली"strNames(2) = "स्टीव"strNames(3) = "नीमा"strNames(4) = "जोस"strNames मिटाएंअंत उप |
वैकल्पिक रूप से, आप सरणी का आकार बदलने के लिए सरणी को फिर से मंद भी कर सकते हैं, सरणी के भाग को साफ़ कर सकते हैं:
1 | ReDim strNames(१ से २) |
यह सरणी को आकार 2 में बदल देता है, स्थिति 3 और 4 को हटा देता है।
काउंट ऐरे
आप UBound और LBound फ़ंक्शंस (ऊपर चर्चा की गई) का उपयोग करके किसी सरणी के प्रत्येक आयाम में पदों की संख्या की गणना कर सकते हैं।
आप सरणी के माध्यम से लूप करके दर्ज किए गए आइटम (या कुछ मानदंडों को पूरा करने वाले आइटम) की संख्या भी गिन सकते हैं।
यह उदाहरण वस्तुओं की एक सरणी के माध्यम से लूप करेगा, और सरणी में पाए जाने वाले गैर-रिक्त तारों की संख्या की गणना करेगा:
123456789101112131415 | उप ArrayLoopandCount ()मंद strNames(१ से ४) स्ट्रिंग के रूप मेंडिम आई अस लॉन्ग, एन अस लॉन्गstrNames(1) = "शेली"strNames(2) = "स्टीव"i = LBound(strNames) के लिए UBound(strNames) के लिएअगर strNames(i) "" तोएन = एन + 1अगर अंतअगला मैंMsgBox n & "गैर-रिक्त मान मिले।"अंत उप |
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
डुप्लिकेट निकालें
किसी बिंदु पर, आप किसी ऐरे से डुप्लिकेट निकालना चाह सकते हैं। दुर्भाग्य से, वीबीए में ऐसा करने के लिए एक अंतर्निहित सुविधा नहीं है। हालांकि, हमने ऐरे से डुप्लीकेट हटाने के लिए एक फ़ंक्शन लिखा है (इस ट्यूटोरियल में शामिल करना बहुत लंबा है, लेकिन अधिक जानने के लिए लिंक पर जाएं)।
फ़िल्टर
VBA फ़िल्टर फ़ंक्शन आपको किसी सरणी को फ़िल्टर करने की अनुमति देता है। यह केवल फ़िल्टर किए गए मानों के साथ एक नई सरणी बनाकर ऐसा करता है। नीचे एक त्वरित उदाहरण दिया गया है, लेकिन विभिन्न आवश्यकताओं के लिए अधिक उदाहरणों के लिए लेख को पढ़ना सुनिश्चित करें।
1234567891011121314 | उप फ़िल्टर_मैच ()'सरणी परिभाषित करें'डिम strNames as वैरिएंटstrNames = Array ("स्टीव स्मिथ", "शैनन स्मिथ", "रयान जॉनसन")'फ़िल्टर ऐरे'डिम strSubNames as वैरिएंटstrSubNames = फ़िल्टर (strNames, "स्मिथ")'फ़िल्टर की गई सरणी की गणना करें'MsgBox "मिला" और UBound(strSubNames) - LBound(strSubNames) + 1 और "नाम।"अंत उप |
इसरारे फंक्शन
आप परीक्षण कर सकते हैं कि क्या चर IsArray फ़ंक्शन का उपयोग करके एक सरणी है:
123456789101112 | उप IsArrayEx ()'1,2,3 पदों के साथ सरणी बनाता है'मंद arrDemo1(3) स्ट्रिंग के रूप में'नियमित स्ट्रिंग चर बनाता है'स्ट्रिंग के रूप में मंद strMsgBox IsArray(arrDemo1)MsgBox IsArray (str)अंत उप |
सरणी में शामिल हों
आप जॉइन फंक्शन के साथ एक पूरे ऐरे को जल्दी से "जॉइन" कर सकते हैं:
123456789101112 | उप Array_Join ()मंद strNames(१ से ४) स्ट्रिंग के रूप मेंडिम ज्वाइननाम स्ट्रिंग के रूप मेंstrNames(1) = "शेली"strNames(2) = "स्टीव"strNames(3) = "नीमा"strNames(4) = "जोस"joinNames = ज्वाइन करें (strNames, ",")MsgBox joinNamesअंत उप |
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
स्ट्रिंग को ऐरे में विभाजित करें
वीबीए स्प्लिट फ़ंक्शन टेक्स्ट की एक स्ट्रिंग को मूल स्ट्रिंग से मानों वाले सरणी में विभाजित करेगा। आइए एक उदाहरण देखें:
123456789 | उप Array_Split ()मंद नाम () स्ट्रिंग के रूप मेंडिम शामिल हुएनाम स्ट्रिंग के रूप मेंjoinNames = "शेल्ली, स्टीव, नेमा, जोस"नाम = स्प्लिट (शामिल नाम, ",")संदेशबॉक्स नाम(1)अंत उप |
यहां हम "शेली, स्टीव, नेमा, जोस" पाठ की इस स्ट्रिंग को अल्पविराम सीमांकक (,") का उपयोग करके एक सरणी (आकार 4) में विभाजित करते हैं।
कास्ट ऐरे
एक सरणी नही सकता वीबीए में स्थिर के रूप में घोषित किया जाना चाहिए। हालांकि, आप ऐरे के रूप में उपयोग करने के लिए एक फ़ंक्शन बनाकर इसके आसपास काम कर सकते हैं:
123456789 | 'कॉन्स्टेंटअरे को परिभाषित करें'फंक्शन कॉन्स्टेंटअरे ()कॉन्स्टेंटअरे = ऐरे(४, १२, २१, १००, ५)अंत समारोह'कॉन्स्टेंटअरे वैल्यू को पुनः प्राप्त करेंउप पुनर्प्राप्ति मान ()MsgBox कॉन्स्टेंटअरे(3)अंत उप |
कॉपी ऐरे
VBA का उपयोग करके किसी Array को कॉपी करने का कोई अंतर्निहित तरीका नहीं है। इसके बजाय आपको एक सरणी से दूसरे में मान निर्दिष्ट करने के लिए लूप का उपयोग करने की आवश्यकता होगी।
12345678910111213141516171819 | उप कॉपीअरे ()मंद Arr1(१ से १००) लंबे समय तकमंद Arr2(१ से १००) लंबे समय तकडिम आई ऐज़ लॉन्ग'ऐरे 1 बनाएं'मैं = 1 से 100 . के लिएArr1(i) = iअगला मैं'CopyArray1 से Array2'मैं = 1 से 100 . के लिएArr2(i) = Arr1(i)अगला मैंMsgBox Arr2(74)अंत उप |
खिसकाना
आपको किसी सरणी को स्थानांतरित करने की अनुमति देने के लिए कोई अंतर्निहित VBA फ़ंक्शन नहीं है। हालाँकि, हमने 2D सरणी को स्थानांतरित करने के लिए एक फ़ंक्शन लिखा है। अधिक जानने के लिए लेख पढ़ें।
वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!
फंक्शन रिटर्न ऐरे
VBA डेवलपर्स के पास एक सामान्य प्रश्न है कि एक ऐसा फ़ंक्शन कैसे बनाया जाए जो एक सरणी देता है। मुझे लगता है कि वैरिएंट एरेज़ का उपयोग करके अधिकांश कठिनाइयों का समाधान किया जाता है। हमने इस विषय पर एक लेख लिखा है: वीबीए फंक्शन रिटर्न ऐरे।
एक्सेस VBA में Arrays का उपयोग करना
ऊपर दिए गए अधिकांश ऐरे उदाहरण एक्सेस वीबीए में ठीक उसी तरह काम करते हैं जैसे वे एक्सेल वीबीए में करते हैं। एक बड़ा अंतर यह है कि जब आप एक्सेस डेटा का उपयोग करके किसी सरणी को पॉप्युलेट करना चाहते हैं, तो आपको रेंज ऑब्जेक्ट के बजाय रिकॉर्डसेट ऑब्जेक्ट के माध्यम से लूप करना होगा।
1234567891011121314151617181920212223 | उप रेंजToArrayAccess ()त्रुटि पर फिर से शुरू करें अगलामंद strNames () स्ट्रिंग के रूप मेंडिम आई ऐज़ लॉन्गडिम आईकाउंट अस लॉन्गडेटाबेस के रूप में मंद डीबीएसरिकॉर्डसेट के रूप में पहले डिम करेंसेट डीबीएस = करंटडीबीसेट rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)rst के साथ.मूवलास्ट.मूवफर्स्टआईकाउंट = .रिकॉर्डकाउंटReDim strNames(1 से iCount)मैं = 1 के लिए आईकाउंट . के लिएstrNames(i) = rst.Fields("ClientName").आगे बढ़ेंअगला मैंके साथ समाप्त करनापहला.बंदपहले सेट करें = कुछ नहींडीबीएस सेट करें = कुछ भी नहींअंत उप |
सरणी ट्यूटोरियल | |
---|---|
ऐरे मेगा-गाइड | हां |
सरणी आकार प्राप्त करें | |
सरणी साफ़ करें | |
फ़िल्टर ऐरे | |
स्थानान्तरित सरणी | |
फंक्शन रिटर्न ऐरे | |
डुप्लिकेट निकालें | |