वीबीए - घोषित करें (मंद), बनाएं, और ऐरे वैरिएबल शुरू करें

यह ट्यूटोरियल प्रदर्शित करेगा कि VBA में ऐरे वेरिएबल्स को कैसे डिक्लेयर (मंद), बनाएं और इनिशियलाइज़ करें

वीबीए ऐरे वेरिएबल क्या है?

एक वीबीए सरणी चर को एक ही नाम के तहत संग्रहीत चर के समूह के रूप में माना जा सकता है और एक ही डेटा प्रकार हो सकता है। एक सरणी पाठ, संख्याओं या वस्तुओं को संग्रहीत कर सकती है।

आप किसी सरणी में किसी तत्व को उसकी अनुक्रमणिका संख्या का उपयोग करके संदर्भित करते हैं।

आप एक ऐरे वैरिएबल को उसी तरह घोषित कर सकते हैं जैसे आप डिम, स्टेटिक, पब्लिक या प्राइवेट कीवर्ड का उपयोग करके किसी अन्य वेरिएबल को घोषित करेंगे।

स्थैतिक सरणियाँ

सरणियाँ 2 प्रकार की होती हैं - स्थिर और गतिशील। जब आप प्रारंभ में सरणी घोषित करते हैं तो निर्दिष्ट आकार के साथ एक स्टेटिक सरणी घोषित की जाती है। इसे फिक्स्ड ऐरे भी कहा जाता है।

1 मंद intA(4) पूर्णांक के रूप में

उपरोक्त सरणी को प्रक्रिया या मॉड्यूल स्तर पर मंद कथन का उपयोग करके घोषित किया गया है, और सरणी का आकार 5 है क्योंकि हमने सरणी के एलबाउंड मान को घोषित नहीं किया है।

नहीं, यह कोई टाइपो नहीं है! सरणी में 4 दर्ज करने के बावजूद, सरणी का आकार 5 है। ऐसा इसलिए है क्योंकि सरणी अनुक्रमणिका स्वचालित रूप से शून्य से शुरू होती है।

ऐरे इंडेक्स

ऐरे इंडेक्स स्वचालित रूप से शून्य से शुरू होते हैं जब तक विकल्प आधार 1 आपके कोड मॉड्यूल के शीर्ष पर घोषित किया गया है।

अगर विकल्प आधार 1 घोषित किया जाता है तो सरणी स्वचालित रूप से 1 से शुरू हो जाएगी।

हालांकि, मुझे इस तरह से समस्याग्रस्त होने के लिए चर घोषित करना लगता है। कोड समीक्षकों को इस बात की जानकारी नहीं हो सकती है कि सरणियाँ शून्य या विकल्प बेस 1 घोषणा से शुरू होती हैं

इसके बजाय, मैं सरणियों की शुरुआत और समाप्ति की स्थिति को स्पष्ट रूप से घोषित करना पसंद करता हूं:

1 मंद intA(२ से ५) पूर्णांक के रूप में

ध्यान दें कि जब आप ऐसा करते हैं, तो आप किसी भी संख्या (न कि केवल 1 या 0) पर सरणी प्रारंभ कर सकते हैं।

गतिशील सरणियाँ

एक गतिशील सरणी चर एक सरणी है जिसका आकार रनटाइम पर बदला जा सकता है। आप आकार के बिना गतिशील चर घोषित करते हैं।

1 मंद intA () पूर्णांक के रूप में

सरणी बनने के बाद आप सरणी के आकार को निर्दिष्ट करने के लिए ReDim कथन का उपयोग कर सकते हैं।

1 रेडिम इंटए(2)

आप किसी भी समय एक गतिशील सरणी का आकार बदल सकते हैं। हालाँकि, ReDim Statement का उपयोग करते समय, सभी मौजूदा मान मिटा दिए जाते हैं। मौजूदा सरणी मानों को संरक्षित करने के लिए, उपयोग करें रेडिम प्रिजर्व बजाय।

1 ReDim संरक्षित intA(2)

आप एक प्रक्रिया, मॉड्यूल या वैश्विक स्तर पर एक गतिशील सरणी घोषित कर सकते हैं, लेकिन आप केवल एक प्रक्रिया के भीतर ReDim कथन का उपयोग कर सकते हैं।

भिन्न सरणी

भिन्न सरणियाँ गतिशील सरणियाँ हैं जिनके साथ काम करना आसान है।

1 मंद varNames ()

ध्यान दें कि आपको डेटा प्रकार (इसे भिन्न माना जाता है) या सरणी आकार निर्दिष्ट करने की आवश्यकता नहीं है।

जैसा कि हम नीचे देखेंगे, आप ऐरे फ़ंक्शन का उपयोग करके भिन्न सरणियों को प्रारंभ कर सकते हैं (पहले सरणियों का आकार बदलने की आवश्यकता नहीं है)!

मॉड्यूल और सार्वजनिक सरणी घोषित करें

जैसा कि ऊपर दिखाया गया है, प्रक्रियाओं के भीतर सरणियों को घोषित किया जा सकता है, उस प्रक्रिया के भीतर उपयोग के लिए:

1234 उप स्टेटिकएरे ()'सरणी को 1 के LBound मान और 4 के UBound मान के साथ घोषित करें'मंद IntA(1 से 4) पूर्णांक के रूप मेंअंत उप

लेकिन उन्हें मॉड्यूल या वैश्विक स्तर पर भी घोषित किया जा सकता है।

1234567 विकल्प स्पष्ट'सरणी को 1 के LBound मान और 4 के UBound मान के साथ घोषित करें'मंद IntA(1 से 4) पूर्णांक के रूप मेंउप स्टेटिकएरे ()अंत उप

इस उदाहरण में, इस कोड मॉड्यूल के भीतर कहीं भी सरणी चर को कॉल किया जा सकता है। इसके बजाय, आप एक सार्वजनिक सरणी घोषित कर सकते हैं जिसका उपयोग आपके पूरे VBA प्रोजेक्ट में किया जा सकता है (अगला भाग देखें)।

एक सार्वजनिक सरणी घोषित करना

आप एक सार्वजनिक स्थैतिक सरणी घोषित करते हैं क्योंकि आप एक सार्वजनिक चर घोषित करेंगे।

1 सार्वजनिक strNames(3) स्ट्रिंग के रूप में

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

यदि आप मॉड्यूल के शीर्ष पर ऐरे घोषित करते हैं, लेकिन मंद कीवर्ड के साथ, तो उस सरणी का उपयोग उस व्यक्तिगत मॉड्यूल तक ही सीमित है। एक अलग मॉड्यूल में ऐरे का उपयोग करने का प्रयास करने से एक त्रुटि होगी।

सरणियों को प्रारंभ करें

आप निम्न तरीके से एक स्थिर सरणी के लिए मान निर्दिष्ट कर सकते हैं।

1234567891011 उप स्टेटिकएरे ()'सरणी को 1 के LBound मान और 4 के UBound मान के साथ घोषित करें'मंद IntA(1 से 4) पूर्णांक के रूप में'सरणी प्रारंभ करें'इंटा(1) = 10इंटा(2) = 20इंटा(3) = 30इंटा(4) = ४०'तत्काल विंडो में सरणी की स्थिति 2 का परिणाम दिखाएं'डीबग.प्रिंट इंटा(2)अंत उप

यदि आप उपरोक्त प्रक्रिया को चलाते हैं, तो 20 का मान तत्काल विंडो में प्रदर्शित होगा।

आप उसी तरह से एक डायनामिक ऐरे को मान भी असाइन कर सकते हैं

12345678910111213 उप डायनेमिकअरे ()'एक गतिशील सरणी घोषित करें लेकिन बाध्य मानों को छोड़कर'मंद IntA () पूर्णांक के रूप में'सरणी प्रारंभ करें'रेडिम इंटा(१ से ४)इंटा(1) = 10इंटा(2) = 20इंटा(3) = 30इंटा(4) = ४०'तत्काल विंडो में सरणी की स्थिति 2 का परिणाम दिखाएं'डिबग.प्रिंटइंटा(2)अंत उप

ऐरे फंक्शन

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

12 'सरणी को पॉप्युलेट करें'intA() = सरणी(१०, २०, ३०, ४०)

लूप के साथ ऐरे को पॉप्युलेट करें

आप Excel में कक्षों की श्रेणी के माध्यम से लूप करके भी सरणियों को पॉप्युलेट कर सकते हैं

1234567891011121314151617 उप TestDynamicArrayFromExcel ()'सरणी घोषित करें'मंद strNames () स्ट्रिंग के रूप में'श्रेणी में पंक्तियों को गिनने के लिए एक पूर्णांक घोषित करें'डिम एन अस इंटीजर'लूप के लिए एक पूर्णांक घोषित करें'डिम आई अस इंटीजर'पंक्तियों को एक श्रेणी में गिनें'एन = रेंज ("ए 1", रेंज ("ए 1")। एंड (एक्सएलडाउन))। पंक्तियां। गणना'श्रेणी में पंक्तियों की मात्रा के लिए सरणी को फिर से करें।ReDim strNames(n)मैं = 0 से n . के लिएstrNames(i) = Range("A1").Offset(i + 1, 0)अगला मैं'सरणी में मान दिखाएं'MsgBox शामिल हों (strNames ())अंत उप

सरणियों को फिर से शुरू करें

आप अपने कोड के किसी भी चरण में अपनी सरणी को फिर से शुरू कर सकते हैं, लेकिन फिर आप अपने सरणी में उस स्थिति में निहित मूल मान खो देंगे।

1234567891011121314 उप स्टेटिकएरे ()'सरणी को 1 के LBound मान और 4 के UBound मान के साथ घोषित करें'मंद IntA(1 से 4) पूर्णांक के रूप में'सरणी प्रारंभ करें'इंटा(1) = 10इंटा(2) = 20इंटा(3) = 30इंटा(4) = ४०'तत्काल विंडो में सरणी की स्थिति 2 का परिणाम दिखाएं'डीबग.प्रिंट इंटा(2)'सरणी को फिर से शुरू करें'इंटए(2)= २००डीबग.प्रिंट इंटा(2)अंत उप

ऊपर के उदाहरण में, स्टेटिक सरणी स्थिति 2 में मान को छोड़कर सभी मान रखेगी - वह मान 200 में बदल जाएगा।

रेडिम का उपयोग करना

यदि आप एक गतिशील सरणी का उपयोग कर रहे हैं, तो आपके सरणी के आकार को सेट करने के लिए ReDim कथन का उपयोग किया जाता है। आप जितनी बार आवश्यकता हो, ऐरे के आकार को बदलने के लिए अपने कोड में बाद में ReDim कथन का उपयोग कर सकते हैं। नीचे दिए गए कोड की लाइन intA Array को 2 के आकार के लिए फिर से इनिशियलाइज़ करेगी (याद रखें - एक ऐरे इंडेक्स 0 से शुरू होता है!)

1 ReDim intA(1) पूर्णांक के रूप में

तो ReDim स्टेटमेंट सहित कोड नीचे दिए गए उदाहरण की तरह दिखेगा।

1234567891011121314151617 उप टेस्टडायनामिकअरे ()'सरणी घोषित करें'मंद intA () पूर्णांक के रूप मेंरेडिम इंटए(2)'संख्याओं के साथ सरणी को पॉप्युलेट करें'इंटए (0) = 2इंटए(1) = 5इंटए(2) = 9'स्थिति 1 में संख्या दिखाएं'डीबग.प्रिंट इंटए(1)'आकार बदलने के लिए सरणी को फिर से करें'रेडिम इंट ए(3)इंटए (0) = 6इंटए(1) = 8'इस बार नंबर 1 की स्थिति में नंबर दिखाएं'डीबग.प्रिंट इंटए(1)अंत उप

यदि आप उपरोक्त प्रक्रिया को चलाते हैं, तो 5 का मान तत्काल विंडो में प्रदर्शित किया जाएगा, और फिर 8 का मान प्रदर्शित किया जाएगा जब हमने ReDim का उपयोग करके सरणी का आकार बदल दिया और इसे फिर से खोल दिया। हालाँकि, चूंकि हमने IntA(2) को पॉप्युलेट नहीं किया है, और हमने Re-Dim Preserve का उपयोग नहीं किया है, इसलिए सरणी में उस स्थिति में मान हटा दिया जाएगा और सरणी में स्थिति 3 और 4 दोनों ही शून्य होंगे।

रेडिम प्रिजर्व का उपयोग करना

यदि हम ReDim Preserve का उपयोग करते हैं, तो यह सरणी में निहित मूल मानों को रखेगा।

1234567891011121314151617 उप टेस्टडायनामिकअरे ()'सरणी घोषित करें'मंद intA () पूर्णांक के रूप मेंरेडिम इंटए(2)'संख्याओं के साथ सरणी को पॉप्युलेट करें'इंटए (0) = 2इंटए(1) = 5इंटए(2) = 9'स्थिति 2 में संख्या दिखाएं'डीबग.प्रिंट इंटए(2)'सरणी को फिर से करें'रेडिम इंट ए(3)इंटए (0) = 6इंटए(1) = 8'संख्या को स्थिति 2 में फिर से दिखाएं'डीबग.प्रिंट इंटए(2)अंत उप

ऊपर प्रदर्शित दोनों संदेश बक्सों में, संख्या 9 दिखाई देगी क्योंकि ReDim Preserve कथन उस मान को उस स्थिति में रखता है।

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

wave wave wave wave wave