VBA Filter Arrays

ο Λειτουργία φίλτρου 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 - σύγκριση βάσης δεδομένων

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

wave wave wave wave wave