У Барри есть рабочий лист, в котором столбец содержит множество путей к файлам. Ему нужен способ извлечь только имя файла (часть справа от последней обратной косой черты) из каждого пути. Он задается вопросом, есть ли быстрый способ сделать это без использования функции «Текст в столбцы».

Есть несколько разных способов, в зависимости от того, хотите ли вы использовать макрос или нет.

Если ваши имена файлов имеют одинаковую длину, вы можете просто использовать функцию ВПРАВО, чтобы вытащить последние символы. (Эта формула предполагает полный путь и имя файла в ячейке A1.)

=RIGHT(A1,11)

Предполагается, что имя файла всегда состоит из 11 символов, например «text001.txt». Если имя файла в каждом экземпляре имеет разную длину, этот подход не сработает. Вместо этого вы можете попробовать эту формулу:

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

Обратите внимание, что в формуле дважды используется функция ПОДСТАВИТЬ. В каждом случае он заменяет обратную косую черту (\) чем-то другим. В первый раз он заменяет их все значением ASCII, равным 1, а во второй раз заменяет их ничем (пустой строкой), чтобы определить, сколько обратных косых черт было в исходном пути. Функция MID используется для определения местоположения (с помощью функций FIND и SUBSTITUTE) места последней обратной косой черты в пути и возврата всего, что находится после этой точки.

Если вы уверены, что имя файла никогда не будет длиннее 99 символов, можно использовать более короткую формулу:

=TRIM(RIGHT(SUBSTITUTE(A2,"\",REPT(" ",100)),99))

Эта формула заменяет все обратные косые черты на 100 пробелов, берет самые правые 99 символов из результирующей строки (это будет имя файла с кучей пробелов перед ним), а затем обрезает все пробелы.

Если вы хотите использовать макрос, вы можете создать очень короткую функцию, которая будет разделять строку (в данном случае полный путь) на основе разделителей:

Function GetFileName(File_Path) As String     Dim Parts

Parts = Split(File_Path, Application.PathSeparator)

GetFileName = Parts(UBound(Parts))

End Function

Сказал, что это было недолго! Функция, которая выполняет тяжелую работу, — это функция Split, которая разделяет строку на основе указанного вами разделителя и вставляет части в массив. В этом примере функция Split использует в качестве разделителя любой разделитель пути, подходящий для системы, в которой работает Excel.

Последний элемент результирующего массива (определяемый функцией UBound) содержит часть исходного пути, которая находится справа от последнего разделителя пути — имя файла.

Вы можете разработать еще более короткую функцию для выполнения этой работы:

Function GetFileName(File_Path) As String     GetFileName=Mid(File_Path,InStrRev(File_Path,"\")+1 End Function

Чтобы использовать любую функцию, введите в ячейку такую ​​формулу:

=GetFileName(A1)

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (12903) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Extracting_File_Names_from_a_Path [Извлечение имен файлов из пути].