Извлечение имен файлов по пути (Microsoft Excel)
У Барри есть рабочий лист, в котором столбец содержит множество путей к файлам. Ему нужен способ извлечь только имя файла (часть справа от последней обратной косой черты) из каждого пути. Он задается вопросом, есть ли быстрый способ сделать это без использования функции «Текст в столбцы».
Есть несколько разных способов, в зависимости от того, хотите ли вы использовать макрос или нет.
Если ваши имена файлов имеют одинаковую длину, вы можете просто использовать функцию ВПРАВО, чтобы вытащить последние символы. (Эта формула предполагает полный путь и имя файла в ячейке 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 символов из результирующей строки (это будет имя файла с кучей пробелов перед ним), а затем обрезает все пробелы.
Если вы хотите использовать макрос, вы можете создать макрос, который двигается назад по пути, пока не найдет последнюю обратную косую черту. Затем он возвращает все после обратной косой черты. Следующий пример начинается с ячейки B1, проверяется все, что находится справа от ячейки (ячейка A1), а затем начинается извлечение имен файлов. Он проходит через все ячейки в столбце A и помещает имя файла, если оно есть, в столбец B.
Sub GetFileName1() Dim Delimiter As String Dim Target As String Dim sFile As String Dim J As Integer Dim iDataLen As Integer Delimiter = "\" Range("B1").Select Do While ActiveCell.Offset(0, -1).Value <> "" Target = ActiveCell.Offset(0, -1).Value iDataLen = Len(Target) sFile = "Delimiter Not Found" For J = iDataLen To 2 Step -1 If Mid(Target, J, 1) = Delimiter Then sFile = Right(Target, iDataLen - J) Exit For End If Next J ActiveCell.Formula = sFile ActiveCell.Offset(1, 0).Select Loop End Sub
Вы также можете использовать гораздо более короткую версию макроса при условии, что вы можете использовать функцию разделения. Эта функция была введена в версии VBA, поставляемой с Excel 2000, и она разделяет строку на основе указанного вами разделителя и вставляет части в массив. В этом примере показано решение, реализованное как определяемая пользователем функция.
Function GetFileName2(File_Path) As String Dim Parts Parts = Split(File_Path, Application.PathSeparator) GetFileName2 = Parts(UBound(Parts)) End Function
В этом случае функция разделения использует в качестве разделителя любой разделитель путей, подходящий для системы, в которой работает Excel. Последний элемент результирующего массива (определяемый функцией UBound) содержит часть исходного пути, которая находится справа от последнего разделителя пути — имя файла. Чтобы использовать функцию, введите в ячейку такую формулу:
=GetFileName2(A1)
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (7333) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:
link: / excelribbon-Extracting_File_Names_from_a_Path [Извлечение имен файлов из пути]
.