Получить путь родительской папки к файлу с помощью формулы ячейки

В столбце A меня есть 20000 строк с именем файла с файловым путем

“C: \ человек \ Microsoft \ ygkyg \ ммддгг \ filename.xls”
“\ Сервер-41 \ производительность \ ммддгг \ filename.doc”
…..
и т.п.

В столбце B я просто хочу получить путь родительской папки.

Может ли кто-нибудь помочь мне с формулой? Я попробовал это, но он дал мне имя файла.

 =MID(a1,FIND(CHAR(1), SUBSTITUTE(a1,"\",CHAR(1),LEN(a1)-LEN(SUBSTITUTE(a1,"\",""))))+1,LEN(a1)) 

Это работает.

=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))

Выше был мой первоначальный ответ. Нил несколько упростил выражение и разместил его в качестве комментария ниже:

 =LEFT(A1,FIND("?",SUBSTITUTE(A1,"\","?",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))) 

Это использует тот факт, что ? является запрещенным символом в дорожках, так что "?" можно безопасно использовать вместо CHAR(1) в качестве метки, тем самым улучшая удобочитаемость. Кроме того, LEFT(A1,x) эквивалентен и короче MID(A1,1,x) , поэтому имеет смысл использовать LEFT . Но самое главное, эта формула использует FIND вместо второго слоя подсчета символов с использованием LEN . Это делает его более читаемым.

  • «Срок службы» строкового литерала в C
  • Функция возвращает None без оператора return
  • Вызов библиотеки C ++ в C #
  • Размер X, Y для массива в функции C
  • Использование нескольких .cpp-файлов в c ++-программе?
  • Как не членские функции улучшают инкапсуляцию
  • strdup () - что он делает в C?
  • Почему в параметрах C ++ последнее значение должно быть добавлено последними?
  • Что более эффективно: вернуть значение против Pass by reference?
  • 'foo' не был объявлен в этой области c ++
  • объекты data.table, назначенные с помощью: = из функции, не напечатанной
  • Давайте будем гением компьютера.