ο Λειτουργία φίλτρου VBA σας επιτρέπει να φιλτράρετε γρήγορα συστοιχίες. Υπάρχουν πολλές ρυθμίσεις που πρέπει να λάβετε υπόψη κατά το φιλτράρισμα συστοιχιών. Θα τα συζητήσουμε παρακάτω.
Φίλτρο - Αντιστοίχιση
Από προεπιλογή, η λειτουργία φίλτρου VBA θα φιλτράρει έναν πίνακα για αντιστοιχίσεις. Στο παρακάτω παράδειγμα θα φιλτράρουμε τον πίνακα για αντιστοιχίσεις με το "Smith".
1234567891011121314 | Sub Filter_Match ()'Ορισμός πίνακαDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames As VariantstrSubNames = Φίλτρο (strNames, "Smith")'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names".Τέλος υπο |
Δυο σημαντικά σημεία:
- Η μεταβλητή φιλτραρισμένου πίνακα θα πρέπει να δηλώνεται ως παραλλαγή τύπου δεδομένων για να αποφευχθεί ο καθορισμός του μεγέθους του πίνακα.
- Από προεπιλογή, η λειτουργία Φίλτρο έχει διάκριση πεζών -κεφαλαίων. Έτσι, το φιλτράρισμα του "smith" θα έδινε ένα διαφορετικό αποτέλεσμα από το "Smith". Παρακάτω θα σας δείξουμε πώς να αλλάξετε αυτήν τη ρύθμιση.
Φίλτρο - Χωρίς διάκριση πεζών -κεφαλαίων
Από προεπιλογή, το VBA είναι Case Sensitive. Αυτό σημαίνει ότι το "smith" δεν ισούται με το "Smith". Αυτό ισχύει για τη λειτουργία φίλτρου, καθώς και για όλες τις (περισσότερες;) άλλες λειτουργίες VBA ή συγκρίσεις.
Προσωπικά, δεν θέλω ποτέ το VBA να έχει διάκριση πεζών -κεφαλαίων, οπότε προσθέτω πάντα το Option Compare Text στο πάνω μέρος όλων των ενοτήτων κώδικα. Η επιλογή Σύγκριση κειμένου λέει στο VBA να αγνοήσει το πεζό, ώστε να μην έχει διάκριση πεζών -κεφαλαίων:
1 | Επιλογή Σύγκριση κειμένου |
Η προσθήκη Συγκρίνετε κείμενο επιλογής στο επάνω μέρος της μονάδας σας θα κάνει την υπόθεση της λειτουργίας φίλτρου αδιάκριτη. Εναλλακτικά, μπορείτε να πείτε ότι η ίδια η συνάρτηση φίλτρου δεν έχει διάκριση πεζών -κεφαλαίων με το επιχείρημα vbTextCompare:
1 | strSubNames = Φίλτρο (strNames, "smith",, vbTextCompare) |
Πλήρες παράδειγμα:
1234567891011121314 | Sub Filter_MatchCase ()'Ορισμός πίνακαDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames As VariantstrSubNames = Φίλτρο (strNames, "smith",, vbTextCompare)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names".Τέλος υπο |
Φίλτρο - Δεν ταιριάζει
Η λειτουργία φίλτρου μπορεί επίσης να χρησιμοποιηθεί για τον προσδιορισμό στοιχείων πίνακα που ΜΗΝ αντιστοιχίστε τα εισαγόμενα κριτήρια ορίζοντας το όρισμα Include σε FALSE:
1 | strSubNames = Φίλτρο (strNames, "Smith", False) |
Πλήρες Παράδειγμα:
1234567891011121314 | Sub Filter_NoMatch ()'Ορισμός πίνακαDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames As VariantstrSubNames = Φίλτρο (strNames, "Smith", False)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "names".Τέλος υπο |
Λειτουργία φίλτρου
Η συνάρτηση φίλτρου VBA επιστρέφει ένα υποσύνολο πίνακα ενός παρεχόμενου πίνακα συμβολοσειράς.
Η σύνταξη της λειτουργίας φίλτρου είναι:
Φίλτρο (SourceArray, Match, [Include], [Compare])
Τα ορίσματα της συνάρτησης είναι:
- ΠηγήArray - Ο αρχικός πίνακας για φιλτράρισμα
- Αγώνας - Η συμβολοσειρά προς αναζήτηση
- [Περιλαμβάνω] - ΠΡΟΑΙΡΕΤΙΚΟΣ TRUE (Επιστρέφει αγώνες), FALSE (Επιστρέφει στοιχεία που δεν ταιριάζουν)
- [Συγκρίνω] - ΠΡΟΑΙΡΕΤΙΚΟΣ vbBinaryCompare - δυαδική σύγκριση, vbTextCompare - σύγκριση κειμένου, vbDatabaseCompare - σύγκριση βάσης δεδομένων