Αυτό το σεμινάριο θα εξηγήσει τον τρόπο χρήσης της μεθόδου Advanced Filter στο VBA
Το προηγμένο φιλτράρισμα στο Excel είναι πολύ χρήσιμο όταν αντιμετωπίζετε μεγάλες ποσότητες δεδομένων όπου θέλετε να εφαρμόσετε μια ποικιλία φίλτρων ταυτόχρονα. Μπορεί επίσης να χρησιμοποιηθεί για την αφαίρεση διπλότυπων από τα δεδομένα σας. Πρέπει να είστε εξοικειωμένοι με τη δημιουργία ενός προηγμένου φίλτρου στο Excel πριν προσπαθήσετε να δημιουργήσετε ένα προηγμένο φίλτρο από το VBA.
Εξετάστε το ακόλουθο φύλλο εργασίας.
Μπορείτε να δείτε με μια ματιά ότι υπάρχουν διπλότυπα που ίσως θέλετε να καταργήσετε. Ο τύπος λογαριασμού είναι ένα μείγμα αποταμίευσης, δανείου όρου και επιταγής.
Πρώτα πρέπει να ορίσετε μια ενότητα κριτηρίων για το προηγμένο φίλτρο. Μπορείτε να το κάνετε σε ξεχωριστό φύλλο.
Για ευκολία αναφοράς, ονόμασα το φύλλο δεδομένων μου «Βάση δεδομένων» και το φύλλο κριτηρίων μου «Κριτήρια».
Σύνταξη σύνθετου φίλτρου
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- ο Εκφραση αντιπροσωπεύει το αντικείμενο εύρους - και μπορεί να οριστεί ως Εύρος (π.χ. Εύρος («A1: A50») - ή το Εύρος μπορεί να εκχωρηθεί σε μια μεταβλητή και αυτή η μεταβλητή μπορεί να χρησιμοποιηθεί.
- ο Δράση απαιτείται όρισμα και θα είναι είτε xlFilterInPlace είτε xlFilterCopy
- ο Εύρος κριτηρίων Το επιχείρημα είναι από πού παίρνετε τα Κριτήρια για φιλτράρισμα (το φύλλο Κριτηρίων μας παραπάνω). Αυτό είναι προαιρετικό καθώς δεν θα χρειάζεστε κριτήρια εάν φιλτράρετε για μοναδικές τιμές, για παράδειγμα.
- ο CopyToRange το επιχείρημα είναι το σημείο στο οποίο θα τοποθετήσετε τα αποτελέσματα του φίλτρου σας - μπορείτε να φιλτράρετε στη θέση του ή μπορείτε να αντιγράψετε το αποτέλεσμα του φίλτρου σας σε μια εναλλακτική τοποθεσία. Αυτό είναι επίσης ένα προαιρετικό επιχείρημα.
- ο Μοναδικός το επιχείρημα είναι επίσης προαιρετικό - Αληθής είναι να φιλτράρετε μόνο σε μοναδικές εγγραφές, Ψευδής είναι να φιλτράρετε όλες τις εγγραφές που πληρούν τα κριτήρια - αν το παραλείψετε, η προεπιλογή θα είναι Ψευδής.
Φιλτράρισμα δεδομένων επί τόπου
Χρησιμοποιώντας τα κριτήρια που εμφανίζονται παραπάνω στο φύλλο κριτηρίων - θέλουμε να βρούμε όλους τους λογαριασμούς με έναν τύπο "Αποταμίευση" και "Τρέχων". Φιλτράρουμε στη θέση τους.
123456789 | Sub CreateAdvancedFilter ()Dim rngΒάση δεδομένων ως εύροςΚριτήρια ως εύρος«καθορίστε τη βάση δεδομένων και τα εύρη κριτηρίωνΟρισμός rngDatabase = Φύλλα ("Βάση δεδομένων"). Εύρος ("A1: H50")Ορισμός rngCriteria = Φύλλα ("Κριτήρια"). Εύρος ("A1: H3")«φιλτράρετε τη βάση δεδομένων χρησιμοποιώντας τα κριτήριαrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaΤέλος υπο |
Ο κώδικας θα αποκρύψει τις γραμμές που δεν πληρούν τα κριτήρια.
Στην παραπάνω διαδικασία VBA, δεν συμπεριλάβαμε τα ορίσματα CopyToRange ή Unique.
Επαναφορά των δεδομένων
Πριν εκτελέσουμε ένα άλλο φίλτρο, πρέπει να καθαρίσουμε το τρέχον. Αυτό θα λειτουργήσει μόνο εάν έχετε φιλτράρει τα δεδομένα σας στη θέση τους.
12345 | Sub ClearFilter ()Στο Σφάλμα Συνέχιση Επόμενο«επαναφέρετε το φίλτρο για να εμφανίζονται όλα τα δεδομέναActiveSheet.ShowAllDataΤέλος υπο |
Φιλτράρισμα μοναδικών τιμών
Στην παρακάτω διαδικασία, έχω συμπεριλάβει το μοναδικό όρισμα, αλλά παρέλειψα το όρισμα CopyToRange. Εάν αφήσετε αυτό το επιχείρημα εκτός, εσείς ΕΙΤΕ πρέπει να βάλετε ένα κόμμα ως κάτοχος θέσης για το επιχείρημα
123456789 | Sub UniqueValuesFilter1 ()Dim rngΒάση δεδομένων ως εύροςΚριτήρια ως εύρος«καθορίστε τη βάση δεδομένων και τα εύρη κριτηρίωνΟρισμός rngDatabase = Φύλλα ("Βάση δεδομένων"). Εύρος ("A1: H50")Ορισμός rngCriteria = Φύλλα ("Κριτήρια"). Εύρος ("A1: H3")«φιλτράρετε τη βάση δεδομένων χρησιμοποιώντας τα κριτήριαrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueΤέλος υπο |
Ή πρέπει να χρησιμοποιήσετε ονομαστικά ορίσματα όπως φαίνεται παρακάτω.
123456789 | Sub UniqueValuesFilter2 ()Dim rngΒάση δεδομένων ως εύροςΚριτήρια ως εύρος«καθορίστε τη βάση δεδομένων και τα εύρη κριτηρίωνΟρισμός rngDatabase = Φύλλα ("Βάση δεδομένων"). Εύρος ("A1: H50")Ορισμός rngCriteria = Φύλλα ("Κριτήρια"). Εύρος ("A1: H3")«φιλτράρετε τη βάση δεδομένων χρησιμοποιώντας τα κριτήριαrngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueΤέλος υπο |
Και τα δύο παραπάνω παραδείγματα κώδικα θα εκτελούν το ίδιο φίλτρο, όπως φαίνεται παρακάτω - τα δεδομένα με μόνο μοναδικές τιμές.
Χρησιμοποιώντας το όρισμα CopyTo
123456789 | Sub CopyToFilter ()Dim rngΒάση δεδομένων ως εύροςΚριτήρια ως εύρος«καθορίστε τη βάση δεδομένων και τα εύρη κριτηρίωνΟρισμός rngDatabase = Φύλλα ("Βάση δεδομένων"). Εύρος ("A1: H50")Ορισμός rngCriteria = Φύλλα ("Κριτήρια"). Εύρος ("A1: H3")«αντιγράψτε τα φιλτραρισμένα δεδομένα σε μια εναλλακτική τοποθεσίαrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueΤέλος υπο |
Σημειώστε ότι θα μπορούσαμε να έχουμε παραλείψει τα ονόματα των ορισμάτων στη γραμμή κώδικα Advanced Filter, αλλά η χρήση ονομάτων ονομάτων διευκολύνει την ανάγνωση και την κατανόηση του κώδικα.
Αυτή η γραμμή παρακάτω είναι πανομοιότυπη με τη γραμμή της παραπάνω διαδικασίας.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
Μόλις εκτελεστεί ο κώδικας, τα αρχικά δεδομένα εξακολουθούν να εμφανίζονται με τα φιλτραρισμένα δεδομένα που εμφανίζονται στη θέση προορισμού που καθορίζεται στη διαδικασία.
Κατάργηση διπλότυπων από τα δεδομένα
Μπορούμε να αφαιρέσουμε διπλότυπα από τα δεδομένα παραλείποντας το όρισμα Κριτήρια και αντιγράφοντας τα δεδομένα σε μια νέα θέση.
1234567 | Sub RemoveDuplicates ()Dim rngΒάση δεδομένων ως εύρος«καθορίστε τη βάση δεδομένωνΟρισμός rngDatabase = Φύλλα ("Βάση δεδομένων"). Εύρος ("A1: H50")«φιλτράρετε τη βάση δεδομένων σε ένα νέο εύρος με μοναδικό σε truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueΤέλος υπο |