यह आलेख प्रदर्शित करेगा कि एक्सेल वीबीए में डायनामिक रेंज कैसे बनाएं।
Excel VBA में एक विशिष्ट श्रेणी के कक्षों को एक चर के रूप में घोषित करना हमें केवल उन विशेष कक्षों के साथ काम करने तक सीमित करता है। एक्सेल में डायनेमिक रेंज घोषित करके, हम अपने कोड और उस कार्यक्षमता पर अधिक लचीलापन प्राप्त करते हैं जो वह कर सकता है।
संदर्भ रेंज और सेल
जब हम एक्सेल में रेंज या सेल ऑब्जेक्ट का संदर्भ देते हैं, तो हम आम तौर पर उन पंक्तियों और कॉलमों में हार्डकोडिंग द्वारा संदर्भित करते हैं जिनकी हमें आवश्यकता होती है।
रेंज संपत्ति
रेंज प्रॉपर्टी का उपयोग करके, नीचे दिए गए कोड की उदाहरण पंक्तियों में, हम इस श्रेणी पर कार्रवाई कर सकते हैं जैसे कि कोशिकाओं का रंग बदलना, या कोशिकाओं को बोल्ड बनाना।
12 | रेंज ("ए 1: ए 5")। फ़ॉन्ट। रंग = vbRedरेंज ("ए 1: ए 5")। फ़ॉन्ट। बोल्ड = ट्रू |
सेल संपत्ति
इसी तरह, हम कक्ष गुण में पंक्ति और स्तंभ को सीधे संदर्भित करके कक्षों की श्रेणी को संदर्भित करने के लिए कक्ष गुण का उपयोग कर सकते हैं। पंक्ति हमेशा एक संख्या होनी चाहिए लेकिन कॉलम एक संख्या हो सकती है या उद्धरण चिह्नों में संलग्न एक अक्षर हो सकता है।
उदाहरण के लिए, सेल पता A1 को इस प्रकार संदर्भित किया जा सकता है:
1 | सेल(1,1) |
या
1 | सेल(1, "ए") |
कक्षों की श्रेणी को संदर्भित करने के लिए कक्ष गुण का उपयोग करने के लिए, हमें श्रेणी की शुरुआत और सीमा के अंत को इंगित करने की आवश्यकता है।
उदाहरण के लिए संदर्भ श्रेणी A1: A6 के लिए हम नीचे इस सिंटैक्स का उपयोग कर सकते हैं:
1 | रेंज (सेल (1,1), सेल (1,6) |
फिर हम नीचे दिए गए कोड की उदाहरण पंक्तियों के अनुसार सीमा पर कार्रवाई करने के लिए सेल संपत्ति का उपयोग कर सकते हैं:
12 | रेंज (सेल (2, 2), सेल (6, 2))। Font.Color = vbRedरेंज (सेल (2, 2), सेल (6, 2))। Font.Bold = True |
चर के साथ गतिशील रेंज
जैसे-जैसे हमारे डेटा का आकार एक्सेल में बदलता है (यानी हम अधिक पंक्तियों और स्तंभों का उपयोग करते हैं, जिन्हें हमने कोडित किया है), यह उपयोगी होगा यदि हमारे कोड में जिन श्रेणियों का हम उल्लेख करते हैं, वे भी बदल जाएं। ऊपर रेंज ऑब्जेक्ट का उपयोग करके हम एक्सेल वर्कशीट के क्षेत्र की अधिकतम पंक्ति और कॉलम नंबरों को स्टोर करने के लिए चर बना सकते हैं, और कोड के चलने के दौरान रेंज ऑब्जेक्ट को गतिशील रूप से समायोजित करने के लिए इन चरों का उपयोग कर सकते हैं।
उदाहरण के लिए
1234 | पूर्णांक के रूप में मंद lRowपूर्णांक के रूप में मंद lCollRow = रेंज("A1048576")।End(xlUp).RowlCol = रेंज ("XFD1")। अंत (xlToLeft)। कॉलम |
कॉलम में अंतिम पंक्ति
चूंकि वर्कशीट में 1048576 पंक्तियाँ होती हैं, वेरिएबल lRow शीट के निचले भाग में जाएगा और फिर वर्कशीट में उपयोग की गई अंतिम पंक्ति में जाने के लिए एंड की प्लस अप एरो की के विशेष संयोजन का उपयोग करेगा - यह हमें देगा उस पंक्ति की संख्या जिसकी हमें अपनी सीमा में आवश्यकता है।
पंक्ति में अंतिम कॉलम
इसी तरह, एलसीओएल कॉलम एक्सएफडी में चला जाएगा जो वर्कशीट में अंतिम कॉलम है, और फिर वर्कशीट में उपयोग किए गए अंतिम कॉलम पर जाने के लिए एंड की और लेफ्ट एरो की के विशेष कुंजी संयोजन का उपयोग करें - यह हमें देगा कॉलम की संख्या जो हमें अपनी सीमा में चाहिए।
इसलिए, वर्कशीट में उपयोग की जाने वाली पूरी रेंज प्राप्त करने के लिए, हम निम्नलिखित कोड चला सकते हैं:
1234567891011 | उप गेटरेंज ()पूर्णांक के रूप में मंद lRowपूर्णांक के रूप में मंद lColरेंज के रूप में मंद rnglRow = रेंज("A1048576")।End(xlUp).Row'श्रेणी में अंतिम कॉलम खोजने में सहायता के लिए lRow का उपयोग करें'lCol = रेंज ("XFD" और lRow)। End (xlToLeft)। कॉलमसेट rng = रेंज (सेल (1, 1), सेल (lRow, lCol))'msgbox हमें रेंज दिखाने के लिए'MsgBox "रेंज है" और rng.Addressअंत उप |
स्पेशल सेल - लास्ट सेल
वर्कशीट में अंतिम पंक्ति और कॉलम का उपयोग करने के लिए हम रेंज ऑब्जेक्ट की स्पेशल सेल विधि का भी उपयोग कर सकते हैं।
123456789101112 | उप उपयोग विशेष सेल ()पूर्णांक के रूप में मंद lRowपूर्णांक के रूप में मंद lColरेंज के रूप में मंद rngमंद rngरेंज के रूप में शुरू करेंसेट rngBegin = रेंज ("A1")lRow = rngBegin.SpecialCells(xlCellTypeLastCell)।पंक्तिlCol = rngBegin.SpecialCells(xlCellTypeLastCell).कॉलमसेट rng = रेंज (सेल (1, 1), सेल (lRow, lCol))'msgbox हमें रेंज दिखाने के लिए'MsgBox "रेंज है" और rng.Addressअंत उप |
प्रयुक्त रेंज
यूज्ड रेंज मेथड में वे सभी सेल शामिल होते हैं जिनमें वर्तमान वर्कशीट में मान होते हैं।
123456 | उप प्रयुक्त रेंज उदाहरण ()रेंज के रूप में मंद rngसेट rng = ActiveSheet.UsedRange'msgbox हमें रेंज दिखाने के लिए'MsgBox "रेंज है" और rng.Addressअंत उप |
वर्तमान क्षेत्र
वर्तमान क्षेत्र यूज्डरेंज से इस मायने में भिन्न है कि यह एक सेल के आसपास की कोशिकाओं को देखता है जिसे हमने एक प्रारंभिक सीमा के रूप में घोषित किया है (अर्थात नीचे दिए गए उदाहरण में चर rngBegin), और फिर उन सभी कोशिकाओं को देखता है जो 'संलग्न' या संबद्ध हैं उस घोषित सेल के लिए। यदि किसी पंक्ति या स्तंभ में कोई रिक्त कक्ष होता है, तो CurrentRegion किसी और कक्ष की तलाश करना बंद कर देगा।
12345678 | उप वर्तमान क्षेत्र ()रेंज के रूप में मंद rngमंद rngश्रेणी के रूप में प्रारंभ करेंसेट rngBegin = रेंज ("A1")सेट rng = rngBegin.CurrentRegion'msgbox हमें रेंज दिखाने के लिए'MsgBox "रेंज है" और rng.Addressअंत उप |
यदि हम इस पद्धति का उपयोग करते हैं, तो हमें यह सुनिश्चित करने की आवश्यकता है कि आपके द्वारा आवश्यक श्रेणी के सभी कक्ष उनके बीच कोई रिक्त पंक्तियों या स्तंभों से जुड़े हुए हैं।
नामांकित श्रेणी
हम अपने कोड में नामांकित श्रेणियों को भी संदर्भित कर सकते हैं। नामांकित श्रेणियां गतिशील हो सकती हैं, जब तक डेटा अपडेट या सम्मिलित किया जाता है, नए डेटा को शामिल करने के लिए श्रेणी का नाम बदल सकता है।
यह उदाहरण "जनवरी" श्रेणी के नाम के लिए फ़ॉन्ट को बोल्ड में बदल देगा
12345 | उप श्रेणीनामउदाहरण ()रेंज के रूप में मंद rngसेट आरएनजी = रेंज ("जनवरी")rng.Font.Bold = = Trueअंत उप |
जैसा कि आप नीचे दिए गए चित्र में देखेंगे, यदि एक पंक्ति को श्रेणी के नाम में जोड़ा जाता है, तो उस पंक्ति को शामिल करने के लिए श्रेणी नाम स्वतः अद्यतन हो जाता है।
क्या हमें फिर से उदाहरण कोड चलाना चाहिए, कोड से प्रभावित सीमा C5:C9 होगी जबकि पहली बार में यह C5:C8 होगी।
टेबल
हम अपने कोड में तालिकाओं का संदर्भ दे सकते हैं (VBA में तालिकाओं को बनाने और उनमें हेरफेर करने के बारे में अधिक जानकारी के लिए क्लिक करें)। चूंकि Excel में तालिका डेटा अद्यतन या परिवर्तित किया जाता है, तालिका को संदर्भित करने वाला कोड तब अद्यतन तालिका डेटा को संदर्भित करेगा। बाहरी डेटा स्रोत से जुड़ी पिवट तालिकाओं का संदर्भ देते समय यह विशेष रूप से उपयोगी होता है।
हमारे कोड में इस तालिका का उपयोग करके, हम प्रत्येक कॉलम में शीर्षकों द्वारा तालिका के कॉलम का उल्लेख कर सकते हैं, और कॉलम पर उनके नाम के अनुसार कार्रवाई कर सकते हैं। जैसे-जैसे तालिका में पंक्तियाँ डेटा के अनुसार बढ़ती या घटती हैं, तालिका श्रेणी तदनुसार समायोजित हो जाएगी और हमारा कोड अभी भी तालिका के पूरे कॉलम के लिए काम करेगा।
उदाहरण के लिए:
123 | उप DeleteTableColumn ()ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").ListColumns("Supplyer").Deleteअंत उप |