VBA Αναζήτηση (Εύρεση) τιμής σε πίνακα

Αυτό το σεμινάριο θα δείξει πώς να αναζητήσετε (βρείτε) μια τιμή σε έναν πίνακα στο VBA

Υπάρχουν διάφοροι τρόποι με τους οποίους μπορείτε να αναζητήσετε μια συμβολοσειρά σε έναν πίνακα - ανάλογα με το αν ο πίνακας είναι μονοδιάστατος ή πολυδιάστατος.

Αναζήτηση σε μονοδιάστατο πίνακα

Για να αναζητήσετε μια τιμή σε έναν μονοδιάστατο πίνακα, μπορείτε να χρησιμοποιήσετε τη λειτουργία φίλτρου.

123 Dim z As Variant"φιλτράρετε τον αρχικό πίνακαz = Filter (Array, String, True, vbCompareBinary)

Ακολουθεί η επιλογή σύνταξη του φίλτρου

Φίλτρο (Πηγή πίνακα, Αντιστοίχιση ως συμβολοσειρά, [Συμπερίληψη ως Boolean], [Σύγκριση ως vbCompareMethod])

ο Πηγή πίνακα και το Αντιστοίχιση ως συμβολοσειρά απαιτούνται ενώ το Συμπεριλάβετε ως Boolean και το Συγκρίνετε ως vbCompareMethod είναι προαιρετικά. Εάν αυτά δεν περιλαμβάνονται, έχουν οριστεί σε Αληθής και vbCompareBinary αντίστοιχα.

Βρείτε τιμές που ταιριάζουν με το Φίλτρο

1234567891011121314 Υπο FindBob ()'Δημιουργία πίνακαDim strName () Ως παραλλαγήstrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")"δηλώστε μια παραλλαγή για να αποθηκεύσετε τα δεδομένα φίλτρουDim strSubNames As Variant"φιλτράρετε τον αρχικό πίνακαstrSubNames = Φίλτρο (strName, "Bob")"εάν η τιμή LBound είναι μεγαλύτερη από -1, τότε η τιμή βρέθηκεΕάν LBound (strSubNames)> -1 Τότε MsgBox ("Βρήκα τον Μπομπ")Τέλος υπο

Ο δεύτερος πίνακας θα περιέχει τις τιμές που βρέθηκαν από το φίλτρο. Εάν οι τιμές LBound και UBound δεν είναι -1, τότε ο πίνακας έχει καταφέρει να βρει την τιμή που αναζητούσατε.

Μπορείτε επίσης να δείτε πόσες φορές εμφανίζεται το κείμενο στον αρχικό πίνακα.

1234567891011121314 Υπομετρήσεις ()«Δημιουργία πίνακαDim strName () Ως παραλλαγήstrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")"δηλώστε έναν πίνακα για να αποθηκεύσετε τα δεδομένα φίλτρουDim strSubNames As Variant"φιλτράρετε τον αρχικό πίνακαstrSubNames = Φίλτρο (strName, "Bob")"αν μείον το LBound από τις τιμές UBound και προσθέσετε 1, θα λάβουμε τον αριθμό των φορών που εμφανίζεται το κείμενοMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "found names."Τέλος υπο

Βρείτε τιμές που ΔΕΝ ταιριάζουν με το φίλτρο

ο [Συμπερίληψη ως Boolean] Η επιλογή σας επιτρέπει να βρείτε πόσες τιμές στον πίνακα σας ΜΗΝ ταιριάζει με το φίλτρο σας

1234567891011121314 Sub CountExtraNames ()'δημιουργία πίνακαDim strName () Ως παραλλαγήstrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")"δηλώστε έναν πίνακα για να αποθηκεύσετε τα δεδομένα φίλτρουDim strSubNames As Variant"φιλτράρετε τον αρχικό πίνακαstrSubNames = Φίλτρο (strName, "Bob", False)"αν μείον το LBound από τις τιμές UBound και προσθέσετε 1, θα λάβουμε τον αριθμό των φορών που εμφανίζεται το κείμενοMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "found names."Τέλος υπο

Ως εκ τούτου, τροποποιήσαμε αυτήν τη γραμμή:

1 strSubNames = Φίλτρο (strName, "Bob")

με αυτήν τη γραμμή:

1 strSubNames = Φίλτρο (strName, "Bob", False)

Χρησιμοποιώντας αυτήν τη γραμμή στον κώδικα, θα εμφανιστούν όλα τα ονόματα που ΔΕΝ ταιριάζουν με το "Bob".

Φίλτρα ευαίσθητα στη θήκη

Θα διαπιστώσετε ότι το φίλτρο έχει διάκριση πεζών -κεφαλαίων από προεπιλογή. Αυτό ισχύει για όλες τις λειτουργίες VBA. Εάν θέλετε να αναζητήσετε κείμενο που δεν έχει διάκριση πεζών -κεφαλαίων, πρέπει να τροποποιήσετε ελαφρώς τον κώδικά σας.

1 z = Φίλτρο (strName, "bob" ,, vbTextCompare)

Προσθέτωντας vbTextCompare στη γραμμή φίλτρου θα επιτρέψει στον κωδικό σας να βρει "bob" ή "Bob". Εάν αυτό παραλειφθεί, το VBA χρησιμοποιείται από προεπιλογή vbBinaryCompare το οποίο θα αναζητήσει μόνο δεδομένα που είναι ΑΚΡΙΒΗΣ αγώνας. Παρατηρήστε στο παραπάνω παράδειγμα, έχουμε αφήσει έξω το [Συμπερίληψη ως Boolean] το επιχείρημα έτσι True θεωρείται.

Επιλογή Σύγκριση κειμένου

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

Χρήση ενός βρόχου για αναζήτηση μέσω ενός πίνακα

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

1234567891011121314151617 Sub LoopThroughArray ()'δημιουργία πίνακαDim strName () Ως παραλλαγήstrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")Dim str Βρείτε ως συμβολοσειράstrFind = "Μπομπ"Dim i As Long«βρόχο μέσα από τον πίνακαΓια i = LBound (strName, 1) To UBound (strName, 1)Αν InStr (strName (i), strFind)> 0 ΤότεMsgBox "Ο Μπομπ βρέθηκε!"Έξοδος γιαΤέλος εανΕπόμενο iΤέλος υπο

Για να βρούμε ένα μέρος της συμβολοσειράς κειμένου δηλαδή "Bob" αντί για "Bob Smith" ή "Bob Williams", έπρεπε να χρησιμοποιήσουμε τη συνάρτηση Instr στη δήλωση If. Αυτό κοίταξε στη συμβολοσειρά που επέστρεψε ο βρόχος από τον πίνακα για να δει εάν το "Bob" ήταν στη συμβολοσειρά και, όπως ήταν στη συμβολοσειρά, θα επέστρεφε ένα πλαίσιο μηνυμάτων και, στη συνέχεια, θα έβγαινε από το βρόχο.

Αναζήτηση σε πολυδιάστατο πίνακα

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

123456789101112131415161718192021222324252627 Λειτουργία LoopThroughArray ()Dim varArray () Ως παραλλαγήDim strFind As StringstrFind = "Γιατρός""δηλώστε το μέγεθος του πίνακαReDim varArray (1, 2)"αρχικοποιήστε τον πίνακαvarArray (0, 0) = "Μελ Σμιθ"varArray (0, 1) = "Fred Buckle"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Λογιστής"varArray (1, 1) = "Γραμματέας"varArray (1, 2) = "Γιατρός"'δηλώστε μεταβλητές για τον βρόχοDim i As Long, j As Long«βρόχος για την πρώτη διάστασηΓια i = LBound (varArray, 1) To UBound (varArray, 1)«βρόχος για τη δεύτερη διάστασηΓια j = LBound (varArray, 2) To UBound (varArray, 2)'αν βρούμε την τιμή, τότε το msgbox θα πει ότι έχουμε την τιμή και βγούμε από τη συνάρτησηΑν varArray (i, j) = strFind ΤότεMsgBox "Ο γιατρός βρέθηκε!"Λειτουργία εξόδουΤέλος εανΕπόμενο jΕπόμενο iΛειτουργία Τέλους
wave wave wave wave wave