TOP

VBA-पाठ 13.1. सरणियों का उपयोग करना (Arrays)

ऐरे (Arrays) का उपयोग अक्सर प्रोग्रामिंग में किया जाता है, जिसमें Excel VBA भी शामिल है।

एक ऐरे अनिवार्य रूप से एक एकल वैरिएबल होता है जिसमें मानों को संग्रहीत करने के लिए कई सेल होते हैं, जबकि एक सामान्य वैरिएबल में केवल एक स्टोरेज सेल होता है जिसमें वह केवल एक मान संग्रहीत कर सकता है।

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

आप समान डेटा प्रकार के मानों के सेट के साथ काम करने के लिए एक सरणी घोषित कर सकते हैं। हमने इसे पहले ही VBA-Lesson 6.2 में कवर कर लिया है। Datatypes लेकिन आइए अब और भी गहराई में उतरें...

सरणियों का उपयोग क्यों किया जाता है?

कल्पना करें कि आप एक ऐसी प्रक्रिया लिखने का प्रयास कर रहे हैं जिसमें आपको 500 मानों तक संग्रहीत करने की आवश्यकता है। अगर आपको 500 अलग-अलग वेरिएबल बनाने होंगे तो यह बहुत मुश्किल होगा। सरणी के मध्य में, इन मानों को संग्रहीत करना और उनके साथ काम करना बहुत आसान हो जाएगा।

सरणियों का उपयोग करने का दूसरा कारण उनकी गति है। Excel वर्कशीट में तालिकाओं (कोशिकाओं से बनी) की तुलना में सरणियों से डेटा पढ़ने में काफी कम समय लगता है।


सरणियों का उपयोग करने का एक उदाहरण

तो यहां एक उदाहरण है जो Excel में VBA सरणियों का उपयोग करने का स्पष्ट लाभ दिखाएगा।

पहली वर्कशीट ("डीएस") में एक डेटा सेट है: 5000 पंक्तियाँ गुणा 3 कॉलम:

दूसरी शीट पर, आपको एक सारांश तालिका मिलेगी जो वर्ष और ग्राहक के अनुसार सभी "हां" उत्तरों ("YES") को ध्यान में रखती है:

इस मामले में, प्रक्रिया डेटा सेट को संसाधित करने और प्रत्येक वर्ष के लिए "हां" प्रतिक्रियाओं की संख्या और प्रत्येक ग्राहक संख्या को रिकॉर्ड करने के लिए एक लूप का उपयोग करेगी, और फिर उस डेटा को उपयुक्त कोशिकाओं में दर्ज करेगी।

सरणियों का उपयोग किए बिना, इस प्रक्रिया को निष्पादित करने में Excel 131.44 सेकंड लगेंगे:

लेकिन पहले डेटा को एक सरणी ("डीएस" वर्कशीट से) में सहेजने और फिर वही गणना करने ("डीएस" वर्कशीट डेटासेट के बजाय सरणी का उपयोग करके) करने में केवल 1.74 सेकंड लगेंगे:

यदि हम सरणी में केवल "YES" प्रतिक्रियाओं वाले डेटा (जो कुल डेटा का लगभग 3/4 है) को संग्रहीत करके अपनी प्रक्रिया को अनुकूलित करने का निर्णय लेते हैं, तो इसमें केवल 1.02 सेकंड लगेंगे:

यह इस बात का एक अच्छा उदाहरण है कि कैसे सरणियों का उपयोग करने से आप किसी प्रक्रिया को 128 गुना तेजी से निष्पादित कर सकते हैं। यदि हम एक ही समय में कई डेटा सेटों के साथ काम करें तो हमारे अनुकूलन का परिणाम और भी बेहतर होगा।

हम पाठ के अंत में अपने उदाहरण के विवरण पर लौटेंगे।

सरणियाँ घोषित करना

नीचे VBA में सरणियाँ घोषित करने के कुछ उदाहरण दिए गए हैं (यदि पहले दो उदाहरण आपको स्पष्ट नहीं हैं, तो इसे पढ़ें):

 'एक-आयामी सरणी घोषित करने का एक उदाहरण
 Dim array1(4)

 'द्वि-आयामी सरणी घोषित करने का एक उदाहरण
 Dim array2(6, 1)

 'गतिशील सरणी घोषित करने का एक उदाहरण
 Dim array3()

यदि आप सरणियाँ घोषित करते समय निश्चित मान दर्ज नहीं कर सकते हैं (क्योंकि वे, उदाहरण के लिए, डेटासेट के आकार पर निर्भर करते हैं), तो कोष्ठक को खाली छोड़ दें।

आपको डेटा प्रकार (स्ट्रिंग, लॉन्ग, आदि) घोषित करने की आवश्यकता नहीं है, हालांकि कई मामलों में यह आपकी प्रक्रिया के निष्पादन को धीमा कर देगा।

एक सरणी में डेटा भंडारण

आइए कुछ डेटा को एक सरणी में संग्रहीत करने का प्रयास करें:

हम इस मामले में 11x1 मान संग्रहीत करना चाहते हैं, इसलिए हमें एक-आयामी सरणी बनाने की आवश्यकता है:

 'घोषणा
 Dim array_example(10)

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

सरणी में प्रत्येक तत्व को अब उसका मान प्राप्त होगा:

 'किसी सरणी में मान सहेजना
 array_example(0)  = Range("A2")
 array_example(1)  = Range("A3")
 array_example(2)  = Range("A4")
 array_example(3)  = Range("A5")
 array_example(4)  = Range("A6")
 array_example(5)  = Range("A7")
 array_example(6)  = Range("A8")
 array_example(7)  = Range("A9")
 array_example(8)  = Range("A10")
 array_example(9)  = Range("A11")
 array_example(10) = Range("A12")

आप प्रत्येक सरणी तत्व पर काम कर सकते हैं या उसे संशोधित कर सकते हैं जैसे कि यह एक सामान्य चर हो।

अगला एक उदाहरण है जहां हम array_example(8) का उपयोग करते हैं:

Sub example()
     'घोषणा
     Dim array_example(10)
     
     'किसी सरणी में मान सहेजना
     array_example(0)  = Range("A2")
     array_example(1)  = Range("A3")
     array_example(2)  = Range("A4")
     array_example(3)  = Range("A5")
     array_example(4)  = Range("A6")
     array_example(5)  = Range("A7")
     array_example(6)  = Range("A8")
     array_example(7)  = Range("A9")
     array_example(8)  = Range("A10")
     array_example(9)  = Range("A11")
     array_example(10) = Range("A12")
     
     'परीक्षण 1
     MsgBox array_example(8) '=> रिटर्न: 04/02/2016
    
     'किसी एक मान को बदलना
     array_example(8) = Year(array_example(8))
     
     'परीक्षण 2
     MsgBox array_example(8) '=> रिटर्न: 2016
End Sub

सरणी को तेज़ी से सहेजने के लिए For लूप एक बेहतर विकल्प होगा:

 'घोषणा
 Dim array_example(10)

 'किसी सरणी में मान सहेजना
 For i = 0 To 10
    array_example(i) = Range("A" & i + 2)
 Next