VBA InStrRev - Πώς να χρησιμοποιήσετε τη λειτουργία Excel VBA InStrRev;

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

Excel VBA INSTRREV

Η συνάρτηση VBA INSTRREV , όπως σημαίνει «In String Reverse» , επιστρέφει τη θέση της πρώτης εμφάνισης μιας συμβολοσειράς αναζήτησης (substring) σε μια άλλη συμβολοσειρά, ξεκινώντας από το τέλος της συμβολοσειράς (από δεξιά προς τα αριστερά) από την οποία αναζητούμε μια συμβολοσειρά με δυνατότητα αναζήτησης.

Η συνάρτηση INSTRREV ξεκινά την αναζήτηση της συμβολοσειράς με δυνατότητα αναζήτησης από το τέλος της συμβολοσειράς στην οποία πρέπει να μάθουμε αλλά μετράει τη θέση από την αρχή. Υπάρχει μια ακόμη συνάρτηση INSTR VBA (σημαίνει "In String" ) που αναζητά επίσης μια συμβολοσειρά σε μια άλλη συμβολοσειρά και επιστρέφει τη θέση, αλλά αυτή η συνάρτηση ξεκινά την αναζήτηση από την αρχή της συμβολοσειράς από την οποία αναζητούμε συμβολοσειρά με δυνατότητα αναζήτησης.

INSTRREV και INSTR , και οι δύο είναι ενσωματωμένη συνάρτηση String / Text VBA του MS Excel. Μπορούμε να τα χρησιμοποιήσουμε ενώ γράφουμε οποιαδήποτε μακροεντολή στο Microsoft Visual Basic Editor.

Σύνταξη

Όπως μπορούμε να δούμε στην παραπάνω εικόνα, υπάρχουν 2 υποχρεωτικά και 2 προαιρετικά επιχειρήματα.

  • StringCheck As String: Αυτό είναι το απαιτούμενο όρισμα. Πρέπει να δώσουμε την έκφραση συμβολοσειράς που αναζητάται.
  • StringMatch As String: Αυτό το επιχείρημα απαιτείται επίσης. Πρέπει να καθορίσουμε την έκφραση συμβολοσειράς που αναζητάται.
  • Start As Long = -1: Αυτό είναι ένα προαιρετικό όρισμα. Καθορίζουμε την αριθμητική έκφραση. Από προεπιλογή, παίρνει -1, που σημαίνει ότι η αναζήτηση ξεκινά στην τελευταία θέση του χαρακτήρα. Εάν καθορίσουμε οποιαδήποτε θετική τιμή όπως 80, τότε ξεκινά την αναζήτηση από το τέλος της συμβολοσειράς σε αυτούς τους 80 χαρακτήρες αριστερά.
  • Σύγκριση ως VbCompareMethod = vbBinaryCompare As Long: Αυτό το όρισμα είναι προαιρετικό.

Μπορούμε να καθορίσουμε τις ακόλουθες τιμές για αυτό το όρισμα.

Επιστροφή τιμών

  1. Η συνάρτηση INSTRREV επιστρέφει 0 εάν ο έλεγχος συμβολοσειράς είναι μηδενικού μήκους ή δεν βρέθηκε αντιστοίχιση συμβολοσειράς ή όρισμα «έναρξη» > διάρκεια αντιστοίχισης συμβολοσειρών .
  2. Αυτή η συνάρτηση επιστρέφει «Null» εάν ένας έλεγχος συμβολοσειράς ή μια αντιστοίχιση συμβολοσειράς είναι «Null».
  3. Εάν η αντιστοίχιση συμβολοσειράς έχει μηδενικό μήκος, τότε η συνάρτηση επιστρέφει στην αρχή .
  4. Εάν βρεθεί μια αντιστοίχιση συμβολοσειράς σε έναν έλεγχο χορδών , τότε η συνάρτηση επιστρέφει τη θέση στην οποία βρίσκεται ο αγώνας.

Πώς να χρησιμοποιήσετε τη λειτουργία VBA INSTRREV;

Ας υποθέσουμε ότι έχουμε δεδομένα για ονόματα ταινιών και τους σκηνοθέτες τους. Θέλουμε να διαχωρίσουμε τα ονόματα σκηνοθέτη.

Έχουμε δεδομένα σε 1201 σειρές. Εάν κάνουμε αυτό το έργο με μη αυτόματο τρόπο, θα χρειαστεί πολύς χρόνος.

Για να κάνουμε το ίδιο, θα χρησιμοποιήσουμε τον κωδικό VBA. Τα βήματα είναι:

  • Πρέπει να κάνουμε κλικ στην εντολή «Visual Basic» που είναι διαθέσιμη στην ομάδα «Code» στην καρτέλα «Developer» , ή μπορούμε να πατήσουμε Alt + F11 για να ανοίξουμε το πρόγραμμα επεξεργασίας οπτικού βασικού.
  • Θα εισαγάγουμε μια ενότητα χρησιμοποιώντας το μενού «Εισαγωγή» .
  • Θα δημιουργήσουμε μια υπορουτίνα με το όνομα "SplittingNames".
  • Χρειαζόμαστε 6 μεταβλητές-μία για την αποθήκευση των τιμών των κελιών, τις οποίες θα χειριστούμε. Δεύτερο για την αποθήκευση της θέσης του πρώτου διαστήματος στη συμβολοσειρά, τρίτο για την αποθήκευση της θέσης του τελευταίου χώρου στη συμβολοσειρά, τέταρτο για την αποθήκευση του τελευταίου αριθμού σειράς, πέμπτο και έκτο για τη σειρά και τη στήλη, τα οποία θα χρησιμοποιήσουμε για να εκτυπώσουμε τις τιμές σε παρακείμενες κύτταρα.
  • Για να μάθουμε την τελευταία γραμμή που χρησιμοποιήθηκε στο φύλλο, πρέπει να χρησιμοποιήσουμε τον ακόλουθο κώδικα.

Αυτός ο κωδικός θα επιλέξει πρώτα το κελί B1 και έπειτα θα επιλέξει το τελευταίο κελί που χρησιμοποιήθηκε στην ίδια στήλη και μετά θα αντιστοιχίσουμε τον αριθμό σειράς του κελιού στη μεταβλητή «LastRow».

  • Τώρα για να χειριστούμε όλα τα κελιά στη στήλη Β, θα εκτελέσουμε έναν βρόχο «για» .
  • Θα αποθηκεύσουμε την τιμή των κελιών της στήλης Β από τη σειρά 2 έως τη γραμμή 1201 μία προς μία στη μεταβλητή για να τα χειριστούμε.
  • Πρέπει να ορίσουμε την τιμή της μεταβλητής «Στήλη» σε 3, καθώς πρέπει να γράψουμε τα διαχωρισμένα ονόματα στο C ( στήλη) και μια στήλη και μετά.
  • Εάν η συμβολοσειρά είναι μόνο μία λέξη που σημαίνει ότι δεν υπάρχει κενό στη συμβολοσειρά, τότε θέλουμε το ίδιο το string ως έξοδο. Για αυτό, θα καθορίσουμε τη συνθήκη χρησιμοποιώντας τη δήλωση "If and Else" με ένα σύμβολο αστερίσκου (που δηλώνει έναν ή περισσότερους χαρακτήρες) ως εξής:
  • Εάν υπάρχει κενό στη συμβολοσειρά, τότε θέλουμε να χωρίσουμε τη συμβολοσειρά. Για να κάνουμε το ίδιο, χρησιμοποιήσαμε τη συνάρτηση INSTR και INSTRREV τόσο για να μάθουμε την πρώτη θέση όσο και την τελευταία θέση διαστήματος, αντίστοιχα. Θα μας βοηθήσει να βρούμε την πρώτη λέξη και την τελευταία λέξη στη συμβολοσειρά, αντίστοιχα.

Η συνάρτηση INSTR παίρνει το όρισμα ως εξής:

Argument Details

  • Start: From which position to start.
  • String1: We need to give string expression being searched.
  • String2: We need to specify string expression being searched for.

Compared as VbCompareMethod: Specifying Comparing method. By default, it is binary compare.

  • We need to use the VBA LEFT function to extract left characters from the string. We have used ‘Last Space-1’ to get the left characters before the last space.

We need to use the RIGHT and LEN functions to extract the right characters from the string after the first space.

Macro is written. Now we just need to run the macro using the F5 key.

Code:

Sub SplittingNames () Dim s As String Dim FirstSpace As Long Dim LastRace Long Long LastRow As Long Dim Row As Long Dim Column As Long Sheet1.Range ("B1"). Select Selection.End (xlDown). Επιλέξτε LastRow = ActiveCell. Row For Row = 2 To LastRow s = Sheet1.Cells (Row, 2). Value Column = 3 If s Like "* *" Then FirstSpace = InStr (1, s, "") LastSPace = InStrRev (s, "") Sheet1.Cells (Row, Column). Value = Left (s, LastSPace - 1) Sheet1.Cells (Row, Column + 1). Value = Right (s, Len (s) - FirstSpace) Else Sheet1.Cells (Σειρά, Στήλη). Τιμή = s Τέλος εάν επόμενο τέλος Υπο

Έχουμε αποτέλεσμα τώρα.

ενδιαφέροντα άρθρα...