यह ट्यूटोरियल प्रदर्शित करेगा कि VBA में RemoveDuplicates विधि का उपयोग करके डुप्लिकेट को कैसे हटाया जाए।
डुप्लिकेट निकालें विधि
जब डेटा आयात किया जाता है या एक्सेल वर्कशीट में चिपकाया जाता है, तो इसमें अक्सर डुप्लिकेट मान हो सकते हैं। आपको आने वाले डेटा को साफ़ करने और डुप्लिकेट निकालने की आवश्यकता हो सकती है।
सौभाग्य से, वीबीए की रेंज ऑब्जेक्ट के भीतर एक आसान तरीका है जो आपको ऐसा करने की अनुमति देता है।
1 | रेंज ("ए 1: सी 8")। डुप्लिकेट कॉलम हटाएं: = 1, हैडर: = xlहाँ |
सिंटैक्स है:
डुप्लिकेट हटाएं ([कॉलम], [हैडर]
- [कॉलम] - निर्दिष्ट करें कि डुप्लिकेट मानों के लिए कौन से कॉलम चेक किए गए हैं। सभी कॉलम डुप्लिकेट माने जाने के लिए बहुत मेल खाते हैं।
- [हैडर] - क्या डेटा में हेडर होता है? xlNo (डिफ़ॉल्ट), xlहां, xlYesNoGuess
तकनीकी रूप से, दोनों पैरामीटर वैकल्पिक हैं। हालाँकि, यदि आप कॉलम तर्क निर्दिष्ट नहीं करते हैं, तो कोई भी डुप्लिकेट नहीं हटाया जाएगा।
हैडर के लिए डिफ़ॉल्ट मान xlNo है। बेशक इस तर्क को निर्दिष्ट करना बेहतर है, लेकिन यदि आपके पास हेडर पंक्ति है, तो यह संभावना नहीं है कि हेडर पंक्ति डुप्लिकेट के रूप में मेल खाएगी।
डुप्लिकेट निकालें उपयोग नोट्स
- RemoveDuplicates विधि का उपयोग करने से पहले, आपको उपयोग की जाने वाली श्रेणी निर्दिष्ट करनी होगी।
- RemoveDuplicates विधि किसी भी पंक्ति को डुप्लिकेट के साथ हटा देगी, लेकिन मूल पंक्ति को सभी मानों के साथ रखेगी।
- RemoveDuplicates विधि केवल स्तंभों पर काम करती है न कि पंक्तियों पर, लेकिन इस स्थिति को सुधारने के लिए VBA कोड लिखा जा सकता है (बाद में देखें)।
वीबीए उदाहरणों के लिए नमूना डेटा
यह दिखाने के लिए कि उदाहरण कोड कैसे काम करता है, निम्नलिखित नमूना डेटा का उपयोग किया जाता है:
डुप्लिकेट पंक्तियां हटाएं
यह कोड केवल कॉलम A के मानों के आधार पर सभी डुप्लिकेट पंक्तियों को हटा देगा:
123 | उप निकालेंDupsEx1 ()रेंज ("ए 1: सी 8")। डुप्लिकेट कॉलम हटाएं: = 1, हैडर: = xlहाँअंत उप |
ध्यान दें कि हमने "A1:C8" श्रेणी को स्पष्ट रूप से परिभाषित किया है। इसके बजाय आप प्रयुक्त रेंज का उपयोग कर सकते हैं। UseRange आपके डेटा की अंतिम उपयोग की गई पंक्ति और कॉलम को निर्धारित करेगा और उस संपूर्ण श्रेणी में RemoveDuplicates लागू करेगा:
123 | उप निकालेंDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Columns:=1, Header:=xlहाँअंत उप |
यूज्डरेंज अविश्वसनीय रूप से उपयोगी है, जिससे आपको सीमा को स्पष्ट रूप से परिभाषित करने की आवश्यकता समाप्त हो जाती है।
इन कोड को चलाने के बाद अब आपकी वर्कशीट कुछ इस तरह दिखेगी:
ध्यान दें कि क्योंकि केवल कॉलम ए (कॉलम 1) निर्दिष्ट किया गया था, 'सेब' डुप्लिकेट पूर्व में पंक्ति 5 में हटा दिया गया है। हालांकि, मात्रा (कॉलम 2) अलग है।
कई स्तंभों की तुलना करते हुए, डुप्लिकेट को हटाने के लिए, हम उन स्तंभों को एक ऐरे विधि का उपयोग करके निर्दिष्ट कर सकते हैं।
एकाधिक स्तंभों की तुलना करते हुए डुप्लिकेट निकालें
123 | उप निकालेंDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlYesअंत उप |
ऐरे वीबीए को कॉलम 1 और 2 (ए और बी) दोनों का उपयोग करके डेटा की तुलना करने के लिए कहता है।
सरणी में कॉलम लगातार क्रम में नहीं होना चाहिए।
123 | उप सरल उदाहरण ()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYesअंत उप |
इस उदाहरण में, डुप्लिकेट तुलना के लिए कॉलम 1 और 3 का उपयोग किया जाता है।
यह कोड उदाहरण डुप्लिकेट की जांच के लिए सभी तीन कॉलम का उपयोग करता है:
123 | उप सरल उदाहरण ()ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYesअंत उप |
तालिका से डुप्लिकेट पंक्तियों को हटाना
RemoveDuplicates को ठीक उसी तरह एक्सेल टेबल पर भी लागू किया जा सकता है। हालाँकि, वाक्यविन्यास थोड़ा अलग है।
1234 | उप सरल उदाहरण ()ActiveSheet.ListObjects("Table1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _हैडर:=xlहाँअंत उप |
यह कॉलम 1 और 3 (ए और सी) के आधार पर तालिका में डुप्लिकेट को हटा देगा। हालाँकि, यह तालिका के रंग स्वरूपण को सुव्यवस्थित नहीं करता है, और आपको तालिका के निचले भाग में पीछे छोड़ी गई रंगीन रिक्त पंक्तियाँ दिखाई देंगी।
सरणियों से डुप्लिकेट निकालें
यदि आपको किसी सरणी से डुप्लिकेट मानों को निकालने की आवश्यकता है, तो निश्चित रूप से आप अपने सरणी को Excel में आउटपुट कर सकते हैं, RemoveDuplicates विधि का उपयोग कर सकते हैं, और सरणी को फिर से आयात कर सकते हैं।
हालाँकि, हमने एक सरणी से डुप्लिकेट निकालने के लिए VBA प्रक्रिया भी लिखी है।
VBA का उपयोग करके डेटा की पंक्तियों से डुप्लिकेट निकालना
RemoveDuplicates विधि केवल डेटा के कॉलम पर काम करती है, लेकिन कुछ 'आउट ऑफ द बॉक्स' सोच के साथ, आप डेटा की पंक्तियों से निपटने के लिए VBA प्रक्रिया बना सकते हैं।
मान लीजिए कि आपका डेटा आपकी वर्कशीट पर इस तरह दिखता है:
आपके पास कॉलम B और E में पहले की तरह ही डुप्लिकेट हैं, लेकिन आप उन्हें RemoveDuplicates पद्धति का उपयोग करके नहीं निकाल सकते।
उत्तर एक अतिरिक्त कार्यपत्रक बनाने के लिए VBA का उपयोग करना है, इसमें डेटा की प्रतिलिपि बनाना है, इसे स्तंभों में स्थानांतरित करना, डुप्लिकेट को हटाना, और फिर इसे वापस पंक्तियों में स्थानांतरित करना।
12345678910111213141516171819202122232425262728293031323334353637 | उप डुप्लीकेट इनरो ()'स्क्रीन अपडेट और अलर्ट बंद करें - हम चाहते हैं कि कोड उपयोगकर्ता को देखे बिना सुचारू रूप से चले'क्या चल रएप्लिकेशन.स्क्रीनअपडेटिंग = गलतएप्लिकेशन। डिस्प्ले अलर्ट = गलत'नई वर्कशीट जोड़ेंपत्रक। बाद में जोड़ें: = सक्रिय पत्रक'नई वर्कशीट को कॉल करें' कॉपीशीट 'ActiveSheet.Name = "कॉपीशीट"'मूल वर्कशीट से डेटा कॉपी करें'शीट्स ("डेटाइनरो")। यूज्डरेंज।कॉपी'बनाई गई नई शीट को सक्रिय करें'पत्रक ("कॉपीशीट")। सक्रिय करें'डेटा को पेस्ट करें ताकि वह अब कॉलम में हो'ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, ऑपरेशन:=xlNone, SkipBlanks:= _असत्य, स्थानान्तरित करना:=सत्य'कॉलम 1 और 3 के डुप्लीकेट हटाएं'ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _:=xlहाँ'मूल वर्कशीट में डेटा साफ़ करें'पत्रक ("डेटाइनरो")। प्रयुक्त रेंज। क्लियर सामग्री'बनाई गई नई वर्कशीट से डेटा के कॉलम कॉपी करें'शीट्स ("कॉपीशीट")। यूज्डरेंज।कॉपी'मूल शीट सक्रिय करें'पत्रक ("डेटाइनरो")। सक्रिय करें'गैर-डुप्लिकेट डेटा पेस्ट करें'ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, ऑपरेशन:=xlNone, SkipBlanks:= _असत्य, स्थानान्तरित करना:=सत्य'कॉपी शीट हटाएं - अब इसकी आवश्यकता नहीं हैपत्रक ("कॉपीशीट")। हटाएं'मूल शीट सक्रिय करें'पत्रक ("डेटाइनरो")। सक्रिय करें'स्क्रीन अपडेट और अलर्ट वापस चालू करें'एप्लिकेशन.स्क्रीनअपडेटिंग = सहीएप्लिकेशन.डिस्प्लेअलर्ट्स = ट्रूअंत उप |
यह कोड मानता है कि पंक्तियों में मूल डेटा 'DataInRows' नामक वर्कशीट पर रखा गया है।
कोड चलाने के बाद, आपकी वर्कशीट इस तरह दिखेगी:
कॉलम ई में 'सेब' डुप्लीकेट अब हटा दिया गया है। उपयोगकर्ता एक साफ स्थिति में वापस आ गया है, जिसमें कोई बाहरी कार्यपत्रक लटका नहीं है, और पूरी प्रक्रिया को बिना किसी स्क्रीन झिलमिलाहट या चेतावनी संदेशों के सुचारू रूप से किया गया है।