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;

Μπορείτε να κατεβάσετε αυτό το Πρότυπο VBA INSTRREV Excel εδώ - Πρότυπο VBA INSTRREV Excel

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

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

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

  • Πρέπει να κάνουμε κλικ στην εντολή «Visual Basic» που είναι διαθέσιμη στην ομάδα «Code» στην καρτέλα «Developer» ή μπορούμε να πατήσουμε Alt + F11 για να ανοίξουμε το πρόγραμμα επεξεργασίας οπτικού βασικού.

  • Θα εισαγάγουμε μια ενότητα χρησιμοποιώντας το μενού «Εισαγωγή» .

  • Θα δημιουργήσουμε μια υπορουτίνα με το όνομα «SplittingNames» .

  • Χρειαζόμαστε 6 μεταβλητές. Ένα για την αποθήκευση των τιμών των κελιών, τις οποίες θα χειριστούμε. Δεύτερο για την αποθήκευση της θέσης του πρώτου διαστήματος στη συμβολοσειρά, τρίτο για την αποθήκευση της θέσης του τελευταίου χώρου στη συμβολοσειρά, τέταρτο για την αποθήκευση του αριθμού τελευταίας σειράς, πέμπτο και έκτο για τη σειρά και τη στήλη που θα χρησιμοποιήσουμε για την εκτύπωση των τιμών σε παρακείμενα κελιά.

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

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

  • Τώρα για να χειριστούμε όλα τα κελιά στη στήλη Β, θα εκτελέσουμε έναν βρόχο «για» .

  • Θα αποθηκεύσουμε την τιμή των κελιών της στήλης Β από τη σειρά 2 έως τη γραμμή 1201 μία προς μία στη μεταβλητή για να τα χειριστούμε.

  • Πρέπει να ορίσουμε την τιμή της μεταβλητής «Στήλη» σε 3 καθώς πρέπει να γράψουμε τα διαχωρισμένα ονόματα στο C (3η στήλη) και μια στήλη και μετά.

  • Εάν η συμβολοσειρά είναι μόνο μία λέξη που σημαίνει ότι δεν υπάρχει κενό διάστημα στη σειρά, θέλουμε το ίδιο το string ως έξοδο. Για αυτό, θα καθορίσουμε τη συνθήκη χρησιμοποιώντας τη δήλωση "If and Else" με ένα σύμβολο αστερίσκου (που δηλώνει έναν ή περισσότερους χαρακτήρες) ως εξής:

  • Εάν υπάρχει κενό στη συμβολοσειρά τότε θέλουμε να χωρίσουμε τη συμβολοσειρά. Για να κάνουμε το ίδιο, χρησιμοποιήσαμε τη συνάρτηση INSTR και INSTRREV τόσο για να μάθουμε την πρώτη θέση όσο και την τελευταία θέση διαστήματος αντίστοιχα. Θα μας βοηθήσει να βρούμε την πρώτη λέξη και την τελευταία λέξη στη συμβολοσειρά αντίστοιχα.

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

Λεπτομέρειες επιχειρημάτων

  • Έναρξη: Από ποια θέση να ξεκινήσετε.
  • String1: Πρέπει να δώσουμε την έκφραση συμβολοσειράς που αναζητάται.
  • String2: Πρέπει να καθορίσουμε την έκφραση συμβολοσειράς που αναζητάται.

Συγκρίνεται ως VbCompareMethod: Καθορισμός της μεθόδου σύγκρισης. Από προεπιλογή, είναι δυαδική σύγκριση.

  • Πρέπει να χρησιμοποιήσουμε τη συνάρτηση ΑΡΙΣΤΕΡΑ vba για να εξαγάγουμε αριστερούς χαρακτήρες από τη συμβολοσειρά. Χρησιμοποιήσαμε το "Last Space-1" για να πάρουμε τους αριστερούς χαρακτήρες πριν από το τελευταίο κενό.

Πρέπει να χρησιμοποιήσουμε τις λειτουργίες RIGHT και LEN για να εξαγάγουμε τους σωστούς χαρακτήρες από τη συμβολοσειρά μετά το πρώτο κενό.

Η μακροεντολή είναι γραμμένη. Τώρα πρέπει απλώς να εκτελέσουμε τη μακροεντολή χρησιμοποιώντας το πλήκτρο F5 .

Κώδικας:

 Sub SplittingNames () Dim s As String Dim FirstSpace As Long Dim LastSpace Long Long LastRow As Long Dim Row As Long Dim Column As Long Sheet 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 Τέλος εάν Επόμενο τέλος Υπο 

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


$config[zx-auto] not found$config[zx-overlay] not found