Gibt es eine effiziente Möglichkeit, die letzte Zeichen- / Zeichenfolgenübereinstimmung in einer Zeichenfolge mithilfe von Basisfunktionen zu identifizieren? Dh nicht das letzte Zeichen / string von der Saite, aber die Position eines Zeichens / letzte Vorkommen der Zeichenkette in einem String. Search
und find
beide arbeiten von links nach rechts, so dass ich mir nicht vorstellen kann, wie ich ohne langwierigen rekursiven Algorithmus anwenden soll. Und diese Lösung scheint jetzt veraltet zu sein.
excel-formula
Geotheorie
quelle
quelle
search
undfind
beide Abfrage - String Inhalt , ‚Spiel‘ ist ein Standardbegriff sowie das verknüpfte Beispiel.Antworten:
Mit neueren Versionen von Excel kommen neue Funktionen und damit neue Methoden. Obwohl es in älteren Versionen replizierbar ist (ich habe es noch nicht gesehen), kann man mit Excel O365 Folgendes verwenden:
Dies kann auch verwendet werden, um die letzte Position von (überlappenden) Teilzeichenfolgen abzurufen:
Während dies beides erlaubt, kein beliebiges Ersatzzeichen mehr zu verwenden und überlappende Muster zuzulassen, ist der "Nachteil" die Verwendung eines Arrays.
Hinweis: Sie können dasselbe Verhalten auch in älteren Excel-Versionen erzwingen
Eingegeben durch CtrlShiftEnteroder Verwenden einer Inline
INDEX
, um implizite Schnittpunkte zu beseitigen:quelle
Ich glaube ich verstehe was du meinst. Angenommen, Sie möchten das am weitesten rechts stehende \ in der folgenden Zeichenfolge (die in Zelle A1 gespeichert ist):
Laufwerk: \ Folder \ SubFolder \ Filename.ext
Um die Position des letzten \ zu erhalten, würden Sie diese Formel verwenden:
Das sagt uns, dass das am weitesten rechts stehende \ bei Zeichen 24 ist. Dazu wird nach "@" gesucht und das allerletzte "\" durch ein "@" ersetzt. Es bestimmt den letzten mit
In diesem Szenario ist der Teilstring einfach "\" mit einer Länge von 1, sodass Sie die Teilung am Ende weglassen und einfach Folgendes verwenden können:
Jetzt können wir das verwenden, um den Ordnerpfad zu erhalten:
Hier ist der Ordnerpfad ohne das nachfolgende \
Und um nur den Dateinamen zu erhalten:
Hier ist jedoch eine alternative Version, um alles rechts von der letzten Instanz eines bestimmten Charakters zu platzieren. Wenn Sie also dasselbe Beispiel verwenden, wird auch der Dateiname zurückgegeben:
quelle
SUBSTITUTE
alle (3) Instanzen von\
mit nichts (Länge der Zeichenfolge verkürzen) durch 3) -> dass\
(der 3.) der letzte ist; Ersetzen Sie das durch etwas Einzigartiges undFIND
die Position dieses einzigartigen Charakters ... großartig ... danke!=ISNUMBER(SEARCH("@",A1))
, wie von @ gwin003 vorgeschlagen .99
? Nehmen Sie nur an, dass die Länge dieser verschiedenen Zeichenfolgen weniger als 99 beträgt? Siehe diese Antwort und diese Antwort , die keine solche Annahme machen.Wie wäre es, eine benutzerdefinierte Funktion zu erstellen und diese in Ihrer Formel zu verwenden? VBA verfügt über eine integrierte Funktion,
InStrRev
die genau das tut, wonach Sie suchen.Fügen Sie dies in ein neues Modul ein:
Und Ihre Funktion sieht folgendermaßen aus (vorausgesetzt, die ursprüngliche Zeichenfolge befindet sich in B1):
quelle
tigeravatar und Jean-François Corbett schlugen vor, diese Formel zu verwenden, um die Zeichenfolge rechts vom letzten Vorkommen des Zeichens "\" zu generieren
Wenn das als Trennzeichen verwendete Zeichen das Leerzeichen "" ist, muss die Formel geändert werden in:
Es ist nicht zu erwähnen, dass das Zeichen "{" durch jedes Zeichen ersetzt werden kann, das im zu verarbeitenden Text nicht "normal" vorkommt.
quelle
Ich habe gerade diese Lösung gefunden, es wurde kein VBA benötigt.
Finden Sie das letzte Vorkommen von "_" in meinem Beispiel;
Von innen nach außen erklärt;
Hoffe das war hilfreich.
quelle
Mit dieser von mir erstellten Funktion können Sie die letzte Instanz einer Zeichenfolge innerhalb einer Zeichenfolge finden.
Sicher, die akzeptierte Excel-Formel funktioniert, aber es ist viel zu schwer zu lesen und zu verwenden. Irgendwann muss man in kleinere Stücke ausbrechen, damit es gewartet werden kann. Meine Funktion unten ist lesbar, aber das ist irrelevant, weil Sie sie in einer Formel mit benannten Parametern aufrufen. Dies macht die Verwendung einfach.
Ich benutze es so:
quelle
In Anbetracht eines Teils eines Kommentars von @SSilk war mein Endziel wirklich, alles rechts von diesem letzten Ereignis zu machen. Ein alternativer Ansatz mit einer sehr einfachen Formel besteht darin, eine Spalte (sagen wir
A
) von Zeichenfolgen und auf die Kopie (sagen wir ) zu kopieren Spalte B) Suchen und Ersetzen anwenden. Nehmen wir zum Beispiel das Beispiel:Drive:\Folder\SubFolder\Filename.ext
Dies gibt zurück, was (hier
Filename.ext
) nach der letzten Instanz des ausgewählten Zeichens (hier\
) übrig bleibt, was manchmal ohnehin das Ziel ist, und erleichtert das Finden der Position des letzten solchen Zeichens mit einer kurzen Formel wie:quelle
Ich bin etwas spät zur Party, aber vielleicht könnte das helfen. Der Link in der Frage hatte eine ähnliche Formel, aber meine verwendet die IF () - Anweisung, um Fehler zu beseitigen.
Wenn Sie keine Angst vor Strg + Umschalt + Eingabetaste haben, können Sie mit einer Array-Formel ziemlich gut umgehen.
Zeichenfolge (in Zelle A1): "one.two.three.four"
Formel:
Ergebnis: 14
Zuerst,
Gibt ein Array von Ganzzahlen von 1 bis 99 zurück :
{1,2,3,4,...,98,99}
.Nächster,
Gibt ein Array von Zeichenfolgen mit einer Länge von 1 zurück, die in der Zielzeichenfolge gefunden wurden, und gibt leere Zeichenfolgen zurück, nachdem die Länge der Zielzeichenfolge erreicht wurde:
{"o","n","e",".",..."u","r","","",""...}
Nächster,
vergleicht jedes Element im Array mit der Zeichenfolge "." und gibt entweder den Index des Zeichens in der Zeichenfolge oder FALSE zurück:
{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Zuletzt,
Gibt den Maximalwert des Arrays zurück:
14
Vorteile dieser Formel sind, dass sie kurz und relativ einfach zu verstehen ist und keine eindeutigen Zeichen erfordert.
Nachteile sind die erforderliche Verwendung von Strg + Umschalt + Eingabetaste und die Begrenzung der Zeichenfolgenlänge. Dies kann mit einer unten gezeigten Variation umgangen werden, aber diese Variation verwendet die OFFSET () -Funktion, die eine flüchtige (read: slow) Funktion ist.
Ich bin mir nicht sicher, wie schnell diese Formel im Vergleich zu anderen ist.
Variationen:
quelle
In neueren Versionen von Excel (2013 und höher) ist Flash Fill möglicherweise eine einfache und schnelle Lösung. Siehe: Verwenden von Flash Fill in Excel .
quelle
Eine einfache Möglichkeit, dies in VBA zu tun, ist:
quelle
Sehr spät zur Party, aber eine einfache Lösung ist die Verwendung von VBA, um eine benutzerdefinierte Funktion zu erstellen.
Fügen Sie die Funktion zu VBA im Arbeitsbuch, Arbeitsblatt oder einem VBA-Modul hinzu
Dann die Zellformel
in einer Zelle und die in Zelle B1 zu durchsuchende Zeichenfolge füllen die Zelle mit dem Text, der dem letzten "/" von Zelle B1 folgt. Keine Längenbeschränkung, keine obskuren Formeln. Der einzige Nachteil, den ich mir vorstellen kann, ist die Notwendigkeit einer makrofähigen Arbeitsmappe.
Jede Benutzer-VBA-Funktion kann auf diese Weise aufgerufen werden, um einen Wert an eine Zellenformel zurückzugeben, einschließlich als Parameter für eine integrierte Excel-Funktion.
Wenn Sie die Funktion häufig verwenden, sollten Sie prüfen, ob das Zeichen nicht in der Zeichenfolge enthalten ist, die Zeichenfolge leer ist usw.
quelle
Zelle
A1 = find/the/position/of/the last slash
Eine einfache Möglichkeit besteht darin, den Text umzukehren und dann wie gewohnt den ersten Schrägstrich zu finden. Jetzt können Sie die Länge des Volltextes abzüglich dieser Zahl ermitteln.
Wie so:
=LEN(A1)-FIND("/",REVERSETEXT(A1),1)+1
Dies gibt 21 zurück, die Position des letzten /
quelle
REVERSETEXT
ist keine Standard-Excel-Formel