Κατάργηση διπλών τιμών στο Excel VBA

Αυτό το σεμινάριο θα δείξει πώς να αφαιρέσετε διπλότυπα χρησιμοποιώντας τη μέθοδο RemoveDuplicates στο VBA.

Μέθοδος RemoveDuplicates

Όταν τα δεδομένα εισάγονται ή επικολλούνται σε ένα φύλλο εργασίας του Excel, μπορεί συχνά να περιέχουν διπλές τιμές. Σως χρειαστεί να καθαρίσετε τα εισερχόμενα δεδομένα και να αφαιρέσετε διπλότυπα.

Ευτυχώς, υπάρχει μια εύκολη μέθοδος στο αντικείμενο Range του VBA που σας επιτρέπει να το κάνετε αυτό.

1 Εύρος ("A1: C8"). RemoveDuplicates Columns: = 1, Header: = xlΝαι

Η σύνταξη είναι:

RemoveDuplicates ([Στήλες], [Κεφαλίδα]

  • [Στήλες] - Καθορίστε ποιες στήλες ελέγχονται για διπλές τιμές. Όλες οι στήλες ταιριάζουν πολύ για να θεωρηθούν διπλές.
  • [Επί κεφαλής] - Τα δεδομένα έχουν κεφαλίδα; xlNo (προεπιλογή), xlYes, xlYesNoGuess

Τεχνικά, και οι δύο παράμετροι είναι προαιρετικές. Ωστόσο, εάν δεν καθορίσετε το όρισμα Στήλες, δεν θα αφαιρεθούν διπλότυπα.

Η προεπιλεγμένη τιμή για την κεφαλίδα είναι xlNo. Φυσικά, είναι καλύτερο να καθορίσετε αυτό το όρισμα, αλλά αν έχετε μια γραμμή κεφαλίδας, είναι απίθανο η σειρά κεφαλίδας να ταιριάζει ως διπλότυπο.

RemoveDuplicates Σημειώσεις χρήσης

  • Πριν χρησιμοποιήσετε τη μέθοδο RemoveDuplicates, πρέπει να καθορίσετε ένα εύρος που θα χρησιμοποιηθεί.
  • Η μέθοδος RemoveDuplicates θα καταργήσει τυχόν γραμμές με διπλότυπα που βρέθηκαν, αλλά θα διατηρήσει την αρχική σειρά με όλες τις τιμές.
  • Η μέθοδος RemoveDuplicates λειτουργεί μόνο σε στήλες και όχι σε γραμμές, αλλά μπορεί να γραφτεί κώδικας VBA για να διορθωθεί αυτή η κατάσταση (δείτε αργότερα).

Δείγματα δεδομένων για παραδείγματα VBA

Για να δείξετε πώς λειτουργεί το παράδειγμα κώδικα, χρησιμοποιούνται τα ακόλουθα δείγματα δεδομένων:

Κατάργηση διπλών σειρών

Αυτός ο κώδικας θα καταργήσει όλες τις διπλές γραμμές που βασίζονται μόνο στις τιμές της στήλης Α:

123 Sub RemoveDupsEx1 ()Εύρος ("A1: C8"). RemoveDuplicates Columns: = 1, Header: = xlΝαιΤέλος υπο

Παρατηρήστε ότι ορίσαμε ρητά το εύρος "A1: C8". Αντ 'αυτού, μπορείτε να χρησιμοποιήσετε το UsedRange. Το UsedRange θα καθορίσει την τελευταία χρησιμοποιούμενη σειρά και στήλη των δεδομένων σας και θα εφαρμόσει το RemoveDuplicates σε ολόκληρο το εύρος:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = 1, Header: = xlΝαιΤέλος υπο

Το UsedRange είναι απίστευτα χρήσιμο, αφαιρώντας την ανάγκη να ορίσετε ρητά το εύρος.

Αφού εκτελέσετε αυτόν τον κώδικα, το φύλλο εργασίας σας θα μοιάζει τώρα με αυτό:

Παρατηρήστε ότι επειδή καθορίστηκε μόνο η στήλη Α (στήλη 1), το διπλότυπο «Μήλα» που ήταν προηγουμένως στη σειρά 5 αφαιρέθηκε. Ωστόσο, η Ποσότητα (στήλη 2) είναι διαφορετική.

Για να αφαιρέσετε διπλότυπα, συγκρίνοντας πολλές στήλες, μπορούμε να καθορίσουμε αυτές τις στήλες χρησιμοποιώντας μια μέθοδο πίνακα.

Κατάργηση διπλότυπων συγκρίνοντας πολλαπλές στήλες

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Array (1, 2), Header: = xlΝαιΤέλος υπο

Ο πίνακας λέει στο VBA να συγκρίνει τα δεδομένα χρησιμοποιώντας και τις δύο στήλες 1 και 2 (Α και Β).

Οι στήλες στον πίνακα δεν χρειάζεται να είναι σε διαδοχική σειρά.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Array (3, 1), Header: = xlΝαιΤέλος υπο

Σε αυτό το παράδειγμα, οι στήλες 1 και 3 χρησιμοποιούνται για τη διπλή σύγκριση.

Αυτό το παράδειγμα κώδικα χρησιμοποιεί και τις τρεις στήλες για τον έλεγχο διπλότυπων:

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Columns: = Array (1, 2, 3), Header: = xlΝαιΤέλος υπο

Κατάργηση διπλών σειρών από έναν πίνακα

Τα RemoveDuplicates μπορούν επίσης να εφαρμοστούν σε έναν πίνακα Excel με τον ίδιο ακριβώς τρόπο. Ωστόσο, η σύνταξη είναι ελαφρώς διαφορετική.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates Columns: = Array (1, 3), _Κεφαλίδα: = xlΝαιΤέλος υπο

Αυτό θα καταργήσει τα διπλότυπα στον πίνακα με βάση τις στήλες 1 και 3 (Α και Γ). Ωστόσο, δεν τακτοποιεί τη μορφοποίηση χρώματος του πίνακα και θα δείτε έγχρωμες κενές σειρές που αφήνονται πίσω στο κάτω μέρος του πίνακα.

Κατάργηση διπλότυπων από πίνακες

Εάν πρέπει να αφαιρέσετε διπλές τιμές από έναν πίνακα, φυσικά μπορείτε να εξάγετε τον πίνακά σας στο Excel, να χρησιμοποιήσετε τη μέθοδο RemoveDuplicates και να εισαγάγετε ξανά τον πίνακα.

Ωστόσο, γράψαμε επίσης μια διαδικασία VBA για την αφαίρεση διπλότυπων από έναν πίνακα.

Αφαίρεση διπλότυπων από σειρές δεδομένων χρησιμοποιώντας VBA

Η μέθοδος RemoveDuplicates λειτουργεί μόνο σε στήλες δεδομένων, αλλά με κάποια σκέψη «εκτός πλαισίου», μπορείτε να δημιουργήσετε μια διαδικασία VBA για την αντιμετώπιση σειρών δεδομένων.

Ας υποθέσουμε ότι τα δεδομένα σας μοιάζουν με αυτό στο φύλλο εργασίας σας:

Έχετε τα ίδια διπλότυπα όπως πριν στις στήλες Β και Ε, αλλά δεν μπορείτε να τα καταργήσετε χρησιμοποιώντας τη μέθοδο RemoveDuplicates.

Η απάντηση είναι να χρησιμοποιήσετε το VBA για να δημιουργήσετε ένα επιπλέον φύλλο εργασίας, να αντιγράψετε τα δεδομένα σε αυτό μεταφέροντάς τα σε στήλες, να αφαιρέσετε τα διπλότυπα και, στη συνέχεια, να τα αντιγράψετε ξανά, μεταφέροντάς τα ξανά σε γραμμές.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()«Απενεργοποιήστε την ενημέρωση οθόνης και τις ειδοποιήσεις - θέλουμε ο κώδικας να λειτουργεί ομαλά χωρίς να το βλέπει ο χρήστης'τι συμβαίνειApplication.ScreenUpdating = ΛάθοςApplication.DisplayAlerts = Λάθος"Προσθέστε ένα νέο φύλλο εργασίαςSheets.Add After: = ActiveSheet"Καλέστε το νέο φύλλο εργασίας" CopySheet "ActiveSheet.Name = "CopySheet"«Αντιγράψτε τα δεδομένα από το αρχικό φύλλο εργασίαςΦύλλα ("DataInRows"). UsedRange.Copy«Ενεργοποιήστε το νέο φύλλο που δημιουργήθηκεΦύλλα ("CopySheet"). ΕνεργοποιήστεΗ επικόλληση μεταφέρει τα δεδομένα έτσι ώστε να είναι τώρα σε στήλεςActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Λειτουργία: = xlNone, SkipBlanks: = _Λάθος, Μεταφορά: = Σωστό«Αφαιρέστε τα διπλότυπα για τις στήλες 1 και 3ActiveSheet.UsedRange.RemoveDuplicates Columns: = Array (1, 3), Header _: = xlΝαι«Διαγράψτε τα δεδομένα στο αρχικό φύλλο εργασίαςΦύλλα ("DataInRows"). UsedRange.ClearContentsΑντιγράψτε τις στήλες δεδομένων από το νέο φύλλο εργασίας που δημιουργήθηκεΦύλλα ("Copysheet"). UsedRange.Copy«Ενεργοποιήστε το αρχικό φύλλοΦύλλα ("DataInRows"). Ενεργοποιήστε«Επικόλληση μεταφέρετε τα μη διπλότυπα δεδομέναActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Λειτουργία: = xlNone, SkipBlanks: = _Λάθος, Μεταφορά: = Σωστό«Διαγράψτε το φύλλο αντιγραφής - δεν χρειάζεται πλέονΦύλλα ("Copysheet"). Διαγραφή«Ενεργοποιήστε το αρχικό φύλλοΦύλλα ("DataInRows"). Ενεργοποιήστε«Ενεργοποιήστε ξανά τις ενημερώσεις οθόνης και τις ειδοποιήσειςApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueΤέλος υπο

Αυτός ο κώδικας υποθέτει ότι τα αρχικά δεδομένα σε γραμμές διατηρούνται σε ένα φύλλο εργασίας που ονομάζεται "DataInRows"

Μετά την εκτέλεση του κώδικα, το φύλλο εργασίας σας θα μοιάζει με αυτό:

Το διπλότυπο «Μήλα» στη στήλη Ε έχει πλέον αφαιρεθεί. Ο χρήστης επιστρέφει σε καθαρή θέση, χωρίς ξένα φύλλα εργασίας να κρέμονται και η όλη διαδικασία έχει γίνει ομαλά χωρίς τρεμόπαιγμα οθόνης ή προειδοποιητικά μηνύματα.

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave