Λειτουργία Excel VBA InStr - επεξηγείται με παραδείγματα

Πίνακας περιεχομένων

Χθες, έλαβα ένα email από έναν από τους αναγνώστες μου - Ιούνιος.

Wantedθελε να μάθει πώς να εφαρμόζει έντονη μορφή γραμματοσειράς σε ένα συγκεκριμένο τμήμα μιας συμβολοσειράς μέσα σε ένα κελί. Για παράδειγμα, εφαρμόστε την έντονη μορφή μόνο στη λέξη "Hello" από το "Hello World".

Και ήθελε να το κάνει αυτό για εκατοντάδες κύτταρα ταυτόχρονα.

Δεδομένου ότι δεν υπάρχει ενσωματωμένη λειτουργικότητα στο Excel που μπορεί να το κάνει αυτό, δημιούργησα μια απλή μακροεντολή που χρησιμοποιεί το Λειτουργία Excel VBA InStr (θα δείτε πώς να το κάνετε αυτό στο Παράδειγμα 4 σε αυτό το σεμινάριο).

Αλλά πρώτα, ας δούμε πώς λειτουργεί η λειτουργία Excel VBA InStr!

Λειτουργία Excel VBA InStr

Σε αυτό το σεμινάριο, θα εξηγήσω τη χρήση της λειτουργίας InStr στο Excel VBA και θα δω μερικά πρακτικά παραδείγματα όπου μπορεί να χρησιμοποιηθεί.

Λειτουργία Excel VBA InStr - Εισαγωγή

Η συνάρτηση InStr βρίσκει τη θέση μιας καθορισμένης υποσύμβασης μέσα στη συμβολοσειρά και επιστρέφει την πρώτη θέση εμφάνισής της.

Για παράδειγμα, εάν θέλετε να βρείτε τη θέση "x" στο "Excel", χρησιμοποιώντας τη συνάρτηση Excel VBA InStr θα επιστρέψει 2.

Σύνταξη της συνάρτησης InStr

InStr ([Έναρξη], String1, String2, [Σύγκριση])
  • [Αρχή] - (προαιρετικό όρισμα) αυτή είναι μια ακέραιη τιμή που λέει στη συνάρτηση InStr την αρχική θέση από την οποία θα πρέπει να αρχίσει να ψάχνει. Για παράδειγμα, εάν θέλω η αναζήτηση να ξεκινήσει από την αρχή, θα εισαγάγω την τιμή ως 1. Εάν θέλω να αρχίσει με τον τρίτο χαρακτήρα και μετά, θα χρησιμοποιήσω το 3. Αν παραλειφθεί, λαμβάνεται η προεπιλεγμένη τιμή του 1.
  • Συμβολοσειρά 1 - Αυτή είναι η κύρια συμβολοσειρά (ή η μητρική συμβολοσειρά) στην οποία θέλετε να πραγματοποιήσετε αναζήτηση. Για παράδειγμα, αν ψάχνετε για τη θέση x στο Excel, η συμβολοσειρά 1 θα είναι "Excel".
  • String2 - Αυτή είναι η υποχορδή που ψάχνετε. Για παράδειγμα, αν ψάχνετε για τη θέση x στο Excel, το String2 θα είναι x.
  • [Συγκρίνω] - (προαιρετικό όρισμα) Μπορείτε να καθορίσετε μία από τις ακόλουθες τρεις τιμές για το όρισμα [σύγκριση]:
    • vbBinaryCompare - Αυτό θα κάνει έναν χαρακτήρα με σύγκριση χαρακτήρων. Για παράδειγμα, αν ψάχνετε για "x" στο "Excel", θα επιστρέψει 2, αλλά αν ψάχνετε για "X" στο "Excel", θα επιστρέψει 0 καθώς το Χ είναι πεζά. Μπορείτε επίσης να χρησιμοποιήσετε 0 αντί για vbBinaryCompare. Εάν το όρισμα [Σύγκριση] παραλείπεται, αυτό λαμβάνεται ως προεπιλογή.
    • vbTextCompare - Αυτό θα κάνει μια σύγκριση κειμένου. Για παράδειγμα, αν αναζητήσετε «x» ή «X» στο Excel, θα επιστρέψει 2 και στις δύο περιπτώσεις. Αυτό το επιχείρημα αγνοεί το γράμμα. Μπορείτε επίσης να χρησιμοποιήσετε 1 αντί για vbTextCompare.
    • vbDatabaseCompare - Αυτό χρησιμοποιείται μόνο για την Microsoft Access. Χρησιμοποιεί τις πληροφορίες στη βάση δεδομένων για τη σύγκριση. Μπορείτε επίσης να χρησιμοποιήσετε 2 αντί για vbDatabaseCompare.

Πρόσθετες σημειώσεις για τη λειτουργία Excel VBA InStr:

  • Το InStr είναι συνάρτηση VBA και όχι συνάρτηση φύλλου εργασίας. Αυτό σημαίνει ότι δεν μπορείτε να το χρησιμοποιήσετε μέσα στο φύλλο εργασίας.
  • Εάν το String2 (το οποίο είναι η υποσύγχρονη θέση του οποίου αναζητάτε) είναι κενό, η συνάρτηση θα επιστρέψει την τιμή του ορίσματος [Έναρξη].
  • Εάν η συνάρτηση InStr δεν μπορεί να βρει το υποσύγχρονο μέσα στην κύρια συμβολοσειρά, θα επέστρεφε 0.

Τώρα ας ρίξουμε μια ματιά σε ένα παράδειγμα χρήσης της συνάρτησης Excel VBA InStr

Παράδειγμα 1 - Εύρεση της θέσης από την αρχή

Σε αυτό το παράδειγμα, θα χρησιμοποιήσω τη συνάρτηση InStr για να βρω τη θέση του «V» στο «Excel VBA» από την αρχή.

Ο κωδικός για αυτό θα είναι:

Sub FindFromBeginning () Dim Position As Integer Position = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub

Όταν εκτελείτε αυτόν τον κώδικα, θα εμφανιστεί ένα πλαίσιο μηνυμάτων με την τιμή 7, η οποία είναι η θέση του «V» στη συμβολοσειρά «Excel VBA».

Παράδειγμα 2 - Εύρεση της θέσης από την αρχή της δεύτερης λέξης

Ας υποθέσουμε ότι θέλω να βρω τη θέση «το» στην πρόταση - «Η γρήγορη καφετιά αλεπού πηδά πάνω από τον τεμπέλη σκύλο»

Ωστόσο, θέλω η αναζήτηση να ξεκινήσει με τη δεύτερη λέξη και μετά.

Σε αυτήν την περίπτωση, πρέπει να αλλάξουμε το όρισμα [Έναρξη] για να βεβαιωθούμε ότι καθορίζει τη θέση από την οποία ξεκινά η δεύτερη λέξη.

Εδώ είναι ο κώδικας που θα το κάνει αυτό:

Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, "The quick brown fox jumps over the lazy dog", "the", vbBinaryCompare) MsgBox Position End Sub

Αυτός ο κώδικας θα εμφανίσει το πλαίσιο μηνυμάτων με την τιμή 32 καθώς έχουμε ορίσει την αρχική θέση ως 4. Επομένως αγνοεί το πρώτο «The» και βρίσκει το δεύτερο «το» στην πρόταση.

Εάν θέλετε να το κάνετε πιο δυναμικό, μπορείτε να βελτιώσετε τον κώδικα έτσι ώστε να αγνοεί αυτόματα την πρώτη λέξη.

Εδώ είναι ο βελτιωμένος κώδικας που θα το κάνει αυτό:

Sub FindFromSecondWord () Dim StartingPosition As Integer Dim Position As Integer StartingPosition = InStr (1, "The quick brown fox jumps over the lazy dog", "", vbBinaryCompare) Position = InStr (StartingPosition, "The fast brown fox jumpings over the lazy σκύλος "," το ", vbBinaryCompare) MsgBox Position End Sub

Αυτός ο κώδικας βρίσκει πρώτα τη θέση ενός χαρακτήρα διαστήματος και τον αποθηκεύει στη μεταβλητή StartingPosition.

Στη συνέχεια, χρησιμοποιεί αυτήν τη μεταβλητή ως αρχική θέση για να αναζητήσει τη λέξη «το».

Ως εκ τούτου, επιστρέφει 32 (που είναι η αρχική θέση του «the» μετά την πρώτη λέξη).

Παράδειγμα 3 - Εύρεση της θέσης @ στη διεύθυνση ηλεκτρονικού ταχυδρομείου

Μπορείτε εύκολα να δημιουργήσετε μια προσαρμοσμένη συνάρτηση για να βρείτε τη θέση @ σε μια διεύθυνση ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας τη συνάρτηση Excel VBA InStr.

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

Λειτουργία FindPosition (Ref As Range) As Integer Dim Position As Integer Position = InStr (1, Ref, "@") FindPosition = Position End function

Τώρα μπορείτε να χρησιμοποιήσετε αυτήν την προσαρμοσμένη συνάρτηση ως οποιαδήποτε άλλη συνάρτηση φύλλου εργασίας. Θα λάβει μια αναφορά κελιού ως είσοδο και θα σας δώσει τη θέση @ σε αυτήν.

Ομοίως, μπορείτε να δημιουργήσετε μια προσαρμοσμένη συνάρτηση για να βρείτε τη θέση οποιουδήποτε υποσύγχρονου μέσα στην κύρια συμβολοσειρά.

Παράδειγμα 4 - Επισήμανση μέρους συμβολοσειράς εντός κελιών

Αυτό είναι το ερώτημα που είχε ζητηθεί μέχρι τον Ιούνιο (ο αναγνώστης μου που με ενέπνευσε επίσης να γράψω αυτό το σεμινάριο).

Εδώ είναι ένα δείγμα δεδομένων με τη μορφή που μου έστειλε ο Ιούνιος:

Το ερώτημά της ήταν να κάνει τους αριθμούς έξω από την παρένθεση με έντονα γράμματα.

Εδώ είναι ο κώδικας που δημιούργησα και το κάνει αυτό:

Sub Bold () Dim rCell As Range Dim Char As Integer For Every rCell In Selection CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = True Next rCell End Sub

Ο παραπάνω κώδικας χρησιμοποιεί το βρόχο Για κάθε για να περάσει από κάθε ένα από τα κελιά της επιλογής. Προσδιορίζει τη θέση του χαρακτήρα βραχίονα ανοίγματος χρησιμοποιώντας τη συνάρτηση InStr. Στη συνέχεια, αλλάζει τη γραμματοσειρά του κειμένου πριν από την αγκύλη.

Για να χρησιμοποιήσετε αυτόν τον κώδικα, πρέπει να αντιγράψετε και να επικολλήσετε σε μια μονάδα στο πρόγραμμα επεξεργασίας VB.

Αφού αντιγράψετε τον κώδικα, επιλέξτε τα κελιά στα οποία θέλετε να κάνετε αυτήν τη μορφοποίηση και εκτελέστε τη μακροεντολή (όπως φαίνεται παρακάτω).

Μπορεί επίσης να σας αρέσουν τα ακόλουθα μαθήματα Excel VBA:

  • Λειτουργία Excel VBA SPLIT.
  • Λειτουργία VBA TRIM.
  • Ο τελικός οδηγός για βρόχους Excel VBA.
  • Οδηγός για αρχάριους για τη χρήση του επόμενου βρόχου στο Excel VBA.
  • Πώς να δημιουργήσετε και να χρησιμοποιήσετε ένα πρόσθετο Excel.
  • Πώς να συνδυάσετε πολλά βιβλία εργασίας σε ένα βιβλίο εργασίας Excel.
  • Πώς να μετρήσετε χρωματιστά κελιά στο Excel.
  • Χρήσιμα παραδείγματα μακροεντολών Excel VBA για αρχάριους.
  • Πώς να ταξινομήσετε δεδομένα στο Excel χρησιμοποιώντας VBA (Οδηγός βήμα προς βήμα)
wave wave wave wave wave