सरणियों का उपयोग करने का अभ्यास करने के लिए, हम मैक्रो का अपना स्वयं का संस्करण बनाएंगे जिसका उपयोग हमने चरण दर चरण सरणियों के गति लाभ को प्रदर्शित करने के लिए किया था...
यहां इस अभ्यास का शुरुआती बिंदु है (आप देखेंगे कि डेटासेट को 1000 पंक्तियों तक कम कर दिया गया है):
यहां आप Excel उदाहरण फ़ाइल डाउनलोड कर सकते हैं: arrays_exercise.xls
अभ्यास का उद्देश्य: प्रक्रिया को एक लूप का उपयोग करके डेटासेट में डेटा को संसाधित करना चाहिए और प्रत्येक वर्ष के लिए हां या नहीं प्रतिक्रियाओं की संख्या की गणना करनी चाहिए और प्रत्येक ग्राहक संख्या के लिए (या तो हाँ या नहीं, उपयोगकर्ता की पसंद के आधार पर) और इस मात्रा को दर्ज करना चाहिए वर्कशीट के निर्दिष्ट सेल में.
"डीएस" वर्कशीट से डेटा को एक सरणी में सहेजने के लिए निम्नलिखित मैक्रो को पूरा करें:
Sub actualize() Dim last_row As Integer 'डेटा सेट की अंतिम पंक्ति '... 'एक गतिशील सरणी में डेटा का एक सेट सहेजा जा रहा है Dim array_db() '... End Sub
यहाँ एक उदाहरण समाधान है:
Sub actualize() Dim last_row As Integer 'डेटाबेस की अंतिम पंक्ति last_row = Sheets("DS").Range("A1").End(xlDown).Row 'एक गतिशील सरणी में डेटा का एक सेट सहेजा जा रहा है Dim array_db() ReDim array_db(last_row - 2, 2) For row_number = 2 To last_row array_db(row_number - 2, 0) = Sheets("DS").Range("A" & row_number) array_db(row_number - 2, 1) = Sheets("DS").Range("B" & row_number) array_db(row_number - 2, 2) = Sheets("DS").Range("C" & row_number) Next End Sub
यह मूल रूप से वही दोहराता है जो हमने पिछले पाठ में किया था...
लेकिन अब हमें निम्नलिखित क्रियाएँ जोड़कर अपने मैक्रो को संशोधित करने की आवश्यकता है:
यहाँ एक उदाहरण समाधान है:
Sub actualize() Dim last_row As Integer, search_value As String, insert_row As Integer, value_yes_no As String, rows_number As Integer 'डेटाबेस की अंतिम पंक्ति last_row = Sheets("DS").Range("A1").End(xlDown).Row 'खोज मान (YES या NO) If Sheets("RES").OptionButton_yes.Value = True Then search_value = "YES" Else search_value = "NO" End If 'उत्तरों की संख्या YES या NO rows_number = WorksheetFunction.CountIf(Sheets("DS").Range("C2:C" & last_row), search_value) 'डेटा सेट को किसी सरणी में सहेजना Dim array_db() ReDim array_db(rows_number - 1, 1) insert_row = 0 For row_number = 2 To last_row value_yes_no = Sheets("DS").Range("C" & row_number) If value_yes_no = search_value Then array_db(insert_row, 0) = Sheets("DS").Range("A" & row_number) array_db(insert_row, 1) = Sheets("DS").Range("B" & row_number) insert_row = insert_row + 1 End If Next End Sub
उपयोगकर्ता की पसंद से खोज प्रक्रिया की शुरुआत में निम्नलिखित कोड द्वारा निर्धारित की जाती है:
'खोज मान (YES या NO) If Sheets("RES").OptionButton_yes.Value = True Then search_value = "YES" Else search_value = "NO" End If
हम "हाँ" या "नहीं" प्रतिक्रियाओं की संख्या निर्धारित करने के लिए काउंटआईएफ फ़ंक्शन का उपयोग करेंगे:
'उत्तरों की संख्या YES या NO rows_number = WorksheetFunction.CountIf(Sheets("DS").Range("C2:C" & last_row), search_value)
हां या नहीं प्रतिक्रियाओं की संख्या को फिट करने के लिए सरणी का आकार बदल दिया गया है और इसे दो कॉलम में घटा दिया गया है:
ReDim array_db(rows_number - 1, 1)
यह डेटा अब ऐरे में संग्रहीत किया जाएगा जब इसका तीसरा कॉलम उपयोगकर्ता के चयन से मेल खाएगा:
'किसी संख्या को किसी सारणी में सम्मिलित करना insert_row = 0 'डेटा सेट प्रोसेसिंग For row_number = 2 To last_row 'कॉलम C मान (YES या NO) value_yes_no = Sheets("DS").Range("C" & row_number) 'यदि मान उपयोगकर्ता के चयन से मेल खाता है, तो स्ट्रिंग को सरणी में संग्रहीत किया जाता है If value_yes_no = search_value Then 'मान को कॉलम A में सहेजा जा रहा है array_db(insert_row, 0) = Sheets("DS").Range("A" & row_number) 'मान को कॉलम बी में सहेजा जा रहा है array_db(insert_row, 1) = Sheets("DS").Range("B" & row_number) 'एक पंक्ति सहेजी गई है => सरणी में प्रविष्टि संख्या 1 से बढ़ गई है insert_row = insert_row + 1 End If Next
हमारी सारणी में केवल वही डेटा शामिल है जिसमें हम रुचि रखते हैं।
बस इतना करना बाकी है:
यहाँ एक उदाहरण समाधान है:
'प्रतिक्रियाओं की संख्या "YES"/"NO" For no_years = 2011 To 2026 For no_client = 1 To 30 counter = 0 For i = 0 To UBound(array_db) If Year(array_db(i, 0)) = no_years And array_db(i, 1) = no_client Then counter = counter + 1 End If Next Cells(no_years - 2009, no_client + 1) = counter Next Next
इसे विस्तार से समझाते हुए टिप्पणियों के साथ समस्या का समाधान किया गया:
'प्रत्येक पंक्ति के लिए लूप For no_years = 2011 To 2026 'प्रत्येक कॉलम के लिए लूप For no_client = 1 To 30 'काउंटर रीसेट counter = 0 'सरणी प्रसंस्करण For i = 0 To UBound(array_db) 'जाँच कर रहा है कि तालिका में पंक्ति वर्ष और ग्राहक संख्या से मेल खाती है If Year(array_db(i, 0)) = no_years And array_db(i, 1) = no_client Then 'यदि वर्ष और ग्राहक संख्या मेल खाती है, तो काउंटर 1 बढ़ जाता है counter = counter + 1 End If Next 'सरणी को संसाधित करने के बाद, परिणाम संबंधित सेल में दर्ज किया जाता है Cells(no_years - 2009, no_client + 1) = counter Next Next
और अंत में, हमारे संपूर्ण मैक्रो के लिए कोड:
Sub actualize() Dim last_row As Integer, search_value As String, insert_row As Integer, value_yes_no As String, rows_number As Integer, counter As Integer 'सामग्री हटाना Range("B2:AE17").ClearContents 'डेटा सेट में अंतिम पंक्ति last_row = Sheets("DS").Range("A1").End(xlDown).Row 'खोज मान (YES या NO) If Sheets("RES").OptionButton_yes.Value = True Then search_value = "YES" Else search_value = "NO" End If 'उत्तरों की संख्या YES या NO rows_number = WorksheetFunction.CountIf(Sheets("DS").Range("C2:C" & last_row), search_value) 'किसी सरणी में मान सहेजना Dim array_db() ReDim array_db(rows_number - 1, 1) insert_row = 0 For row_number = 2 To last_row value_yes_no = Sheets("DS").Range("C" & row_number) If value_yes_no = search_value Then array_db(insert_row, 0) = Sheets("DS").Range("A" & row_number) array_db(insert_row, 1) = Sheets("DS").Range("B" & row_number) insert_row = insert_row + 1 End If Next 'उत्तरों की गिनती YES या NO For no_years = 2011 To 2026 For no_client = 1 To 30 counter = 0 For i = 0 To UBound(array_db) If Year(array_db(i, 0)) = no_years And array_db(i, 1) = no_client Then counter = counter + 1 End If Next Cells(no_years - 2009, no_client + 1) = counter Next Next End Sub
यहां आप Excel उदाहरण फ़ाइल डाउनलोड कर सकते हैं: arrays_exercise_completed.xls