Ich habe einen Pfadnamen, der Backslashs als Trennzeichen verwendet und in der Zelle mit einem Backslash endet B5
, z. B. \\stack\over\flow\
. Ich möchte ihn auf reduzieren \\stack\over\
. Ich brauche eine Formel, um die letzte \
und untergeordnete Pfadkomponente aus meinem vollständigen Pfad zu entfernen.
Antwort1
Geben Sie in C5 die Formel ein:
=REPLACE(B5,FIND("@",SUBSTITUTE(B5,"\","@",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1))+1,99,"")
Antwort2
Aufbauend aufbosco_yips Antwort, vereinfacht und erklärt:
=LEFT(B5,FIND("|",SUBSTITUTE(B5,"\","|",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1)))
SUBSTITUTE(B5,"\","")
entfernt alle Backslashes inB5
(indem sie durch leere Zeichenfolgen ersetzt werden). Wenn also beispielsweiseB5
ist\\stack\over\flow\
, wäre diesstackoverflow
.LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))
ist ein gängiger Trick zum Zählen der Anzahl der Backslashs inB5
. Wir ziehen davon 1 ab, um die Nummer des vorletzten Backslashs zu erhalten.SUBSTITUTE(B5,"\","|", <the above> )
ersetzt den vorletzten Backslash durch einen|
(senkrechten Strich).FIND("|", <the above> )
findet diePositiondes|
, der (vermutlich / hoffentlich) der vorletzte Backslash war. Natürlich gibt es hier ein Problem, wennB5
bereits vertikale Striche enthalten sind, aber beachten Sie, dass dies|
in Windows-Pfadnamen nicht zulässig ist. (Im Gegensatz dazu@
Istein gültiges Windows-Dateinamenzeichen.)LEFT(B5, <the above> )
erhält den WertB5
bis einschließlich des vorletzten Backslashs.
Beachten Sie, dass ein Fehler auftritt , wenn B5
nur eines enthalten ist \
(z. B. \
, foo\bar
oder ). Wenn oder enthalten ist , ist das Ergebnis .
\Program Files
B5
\\
\\stack
\
bosco_yips Antwortverhält sich gleich.