Формула Excel, удалить последний \ и дочерний путь из строки

Формула Excel, удалить последний \ и дочерний путь из строки

У меня есть имя пути, которое использует обратные косые черты в качестве разделителей и заканчивается обратной косой чертой в ячейке B5, например,  \\stack\over\flow\. Я хотел бы сократить его до \\stack\over\. Мне нужна формула для удаления последнего \и дочернего компонента пути из моего полного пути.

решение1

В ячейке C5 введите формулу:

=REPLACE(B5,FIND("@",SUBSTITUTE(B5,"\","@",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1))+1,99,"")

решение2

Опираясь наответ bosco_yip, упрощая и объясняя это:

=LEFT(B5,FIND("|",SUBSTITUTE(B5,"\","|",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1)))
  • SUBSTITUTE(B5,"\","")удаляет все обратные косые черты B5 (заменяя их пустыми строками). Так, например, если B5is \\stack\over\flow\, это будет stackoverflow.
  • LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))— это распространенный прием для подсчета количества обратных косых черт в  B5. Мы вычитаем из этого 1, чтобы получить номер предпоследней обратной косой черты.
  • SUBSTITUTE(B5,"\","|", <the above> ) заменяет предпоследнюю обратную косую черту на  |(вертикальную черту).
  • FIND("|", <the above> ) находитпозиция, который |(предположительно / надеюсь) был предпоследним обратным слешем. Естественно, здесь будет проблема, если B5уже содержит какие-либо вертикальные черты, но учтите, что это |не допускается в именах путей Windows. (В отличие от этого,@ являетсядопустимый символ имени файла Windows.)
  • LEFT(B5, <the above> )получает значение от B5 (включительно) до предпоследнего обратного слеша.

Обратите внимание, что если  B5содержит только один  \ (например,  \, foo\barили  \Program Files), то выше будет получена ошибка. Если  B5есть  \\или  \\stack, то результатом будет  \.  ответ bosco_yipведет себя так же.

Связанный контент