VBA INSTRREV

Excel VBA INSTRREV

Die VBA INSTRREV- Funktion, die für 'In String Reverse' steht , gibt die Position des ersten Auftretens einer Suchzeichenfolge (Teilzeichenfolge) in einer anderen Zeichenfolge zurück, beginnend am Ende der Zeichenfolge (von rechts nach links), nach der wir suchen eine durchsuchbare Zeichenfolge.

Die Funktion INSTRREV beginnt am Ende der Zeichenfolge, in der wir herausfinden müssen, nach der durchsuchbaren Zeichenfolge zu suchen, zählt jedoch die Position von Anfang an. Es gibt eine weitere INSTR vba-Funktion (steht für 'In String' ), die ebenfalls nach einer Zeichenfolge in einer anderen Zeichenfolge sucht und die Position zurückgibt. Diese Funktion startet die Suche jedoch am Anfang der Zeichenfolge, von der aus wir nach durchsuchbaren Zeichenfolgen suchen.

INSTRREV und INSTR sind beide integrierte String / Text-VBA-Funktionen von MS Excel. Wir können sie beim Schreiben eines beliebigen Makros in Microsoft Visual Basic Editor verwenden.

Syntax

Wie wir im obigen Bild sehen können, gibt es 2 obligatorische und 2 optionale Argumente.

  • StringCheck As String: Dies ist das erforderliche Argument. Wir müssen den gesuchten String-Ausdruck angeben.
  • StringMatch As String: Dieses Argument ist ebenfalls erforderlich. Wir müssen den gesuchten Zeichenfolgenausdruck angeben.
  • Start As Long = -1: Dies ist ein optionales Argument. Wir geben den numerischen Ausdruck an. Standardmäßig wird -1 verwendet, was bedeutet, dass die Suche an der letzten Zeichenposition beginnt. Wenn wir einen positiven Wert wie 80 angeben, beginnt die Suche am Ende der Zeichenfolge in den 80 Zeichen von links.
  • Vergleichen als VbCompareMethod = vbBinaryCompare As Long: Dieses Argument ist optional.

Wir können die folgenden Werte für dieses Argument angeben.

Rückgabewerte

  1. Die Funktion INSTRREV gibt 0 zurück, wenn die Zeichenfolgenprüfung die  Länge Null hat oder  keine Zeichenfolgenübereinstimmung gefunden wurde oder das Argument 'start' > Länge der Zeichenfolgenübereinstimmung .
  2. Diese Funktion gibt ‚Null‘ , wenn ein String - Check  oder String Match  ist ‚Null‘ .
  3. Wenn die Zeichenfolgenübereinstimmung die Länge Null hat, kehrt die Funktion zum Start zurück .
  4. Wenn ein String - Match in einem String Prüfung gefunden wird , dann gibt die Funktion die Position , an der Übereinstimmung gefunden wird.

Wie verwende ich die VBA INSTRREV Funktion?

Sie können diese VBA INSTRREV Excel-Vorlage hier herunterladen - VBA INSTRREV Excel-Vorlage

Angenommen, wir haben Daten für Filmnamen und deren Regisseure. Wir wollen die Namen der Regisseure aufteilen.

Wir haben Daten in 1201 Zeilen. Wenn wir diese Aufgabe manuell ausführen, wird dies viel Zeit in Anspruch nehmen.

Um dasselbe zu tun, verwenden wir den VBA-Code. Schritte sind:

  • Wir müssen auf den Befehl 'Visual Basic' klicken , der in der Gruppe 'Code' auf der Registerkarte 'Entwickler' verfügbar ist , oder wir können Alt + F11 drücken , um den Visual Basic-Editor zu öffnen.

  • Wir werden ein Modul über das Menü 'Einfügen' einfügen .

  • Wir werden eine Unterroutine mit dem Namen 'SplittingNames' erstellen .

  • Wir brauchen 6 Variablen. Eine zum Speichern der Werte der Zellen, die wir manipulieren werden. Zweitens zum Speichern der Position des ersten Leerzeichens in der Zeichenfolge, drittens zum Speichern der Position des letzten Leerzeichens in der Zeichenfolge, viertens zum Speichern der letzten Zeilennummer, fünftens und sechsten für Zeile und Spalte, mit denen die Werte in benachbarten Zellen gedruckt werden.

  • Um die zuletzt verwendete Zeile im Blatt herauszufinden, müssen wir den folgenden Code verwenden.

Dieser Code wählt zuerst die Zelle B1 und dann die zuletzt verwendete Zelle in derselben Spalte aus. Anschließend weisen wir der Variablen 'LastRow' die Zeilennummer der Zelle zu.

  • Um nun alle Zellen in der B-Spalte zu bearbeiten, führen wir eine 'for'-Schleife aus .

  • Wir werden den Wert der Zellen der Spalte B von Zeile 2 bis Zeile 1201 einzeln in der Variablen 's' speichern, um sie zu bearbeiten.

  • Wir müssen den Wert der Variablen 'Column' auf 3 setzen, da wir die geteilten Namen in C (3. Spalte) und eine Spalte weiter schreiben müssen.

  • Wenn die Zeichenfolge nur ein Wort ist, was bedeutet, dass in der Zeichenfolge kein Leerzeichen vorhanden ist, möchten wir die Zeichenfolge selbst als Ausgabe. Zu diesem Zweck geben wir die Bedingung mit 'If and Else-Anweisung' mit einem Sternchen (das ein oder mehrere Zeichen angibt) wie folgt an:

  • Wenn in der Zeichenfolge Platz ist, möchten wir die Zeichenfolge teilen. Um dasselbe zu tun, haben wir die Funktionen INSTR und INSTRREV verwendet, um die erste Raumposition bzw. die letzte Raumposition herauszufinden. Es wird uns helfen, das erste und das letzte Wort in der Zeichenfolge zu finden.

Die INSTR-Funktion verwendet das folgende Argument:

Argumentdetails

  • Start: Von welcher Position aus soll gestartet werden?
  • String1: Wir müssen den gesuchten String-Ausdruck angeben .
  • String2: Wir müssen den gesuchten String-Ausdruck angeben.

Im Vergleich zu VbCompareMethod: Angabe der Vergleichsmethode. Standardmäßig ist es ein binärer Vergleich.

  • Wir müssen die vba LEFT- Funktion verwenden , um linke Zeichen aus der Zeichenfolge zu extrahieren. Wir haben 'Last Space-1' verwendet , um die linken Zeichen vor dem letzten Leerzeichen zu erhalten.

Wir müssen die Funktionen RIGHT und LEN verwenden , um die richtigen Zeichen nach dem ersten Leerzeichen aus der Zeichenfolge zu extrahieren.

Makro ist geschrieben. Jetzt müssen wir das Makro nur noch mit der Taste F5 ausführen .

Code:

 Sub SplittingNames() Dim s As String Dim FirstSpace As Long Dim LastSPace As Long Dim LastRow As Long Dim Row As Long Dim Column As Long Sheet1.Range("B1").Select Selection.End(xlDown).Select 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(Row, Column).Value = s End If Next End Sub 

We have a result now.