In this guide, we’re going to show you how to get filename from path in Excel. We will cover how to do this with and without VBA.
Download Workbook
File path and file name
A file path is a string identifier that specifies the unique location in a file system. It contains folders in a hierarchical order following by a file name. Each element is separated by a delimiter which is usually a backslash «». The goal of getting filename from path is to parse that filename after the last delimiter.
Warning: If your paths contain another separator, update the formulas by replacing backslash («») with the separator character fits your case.
We will show you four different approaches to get filename from path in Excel.
Conservative method
Our first approach is using well known Excel functions MIN, SUBSTITUE and LEN to get the file name. You can use this formula in any Excel version.
=MID(<path>,FIND(«*»,SUBSTITUTE(<path>,»»,»*»,LEN(<path>)-LEN(SUBSTITUTE(<path>,»»,»»))))+1,LEN(<path>))
This formula has couple of steps:
- At the inner section, all separators («») get replaced with empty strings.
- The formula subtracts the length of substituted path (1) from original path to find the number of separators.
- The outer SUBSTITUTE function replaces the last separator («») with «*». Obviously, the last separator’s instance is equal to number of separators (2).
- Finally, the FIND locates the «*» character, and the MID function parses the file name after the character.
VBA with FileSystemObject
You can use VBA to create your own custom functions which you can use in worksheet as well. Of course, you can use this function in your macros as well.
The code is very short. It uses GetFileName method of FileSystemObject object. The important section of the code is the initializing of the object. The following code sets FileSystemObject object to fso variable.
Set fso = CreateObject(«Scripting.FileSystemObject»)
Once the object is initialized, use the GetFileName method by providing the path.
GetFileNameFromPath_FSO = fso.GetFileName(«C:Excel FilesDashboards.xlsm»)
The above line returns «Dashboard.xlsm» string. Here is the function version you can use in your worksheets as well.
Function GetFileNameFromPath_FSO(ByVal Path As String) As String Set fso = CreateObject("Scripting.FileSystemObject") GetFileNameFromPath_FSO = fso.GetFileName(Path) End Function
VBA with a recursive function
A recursive function is function which calls itself. The recursive approach acts like an iteration and helps us to parse values starting from the end of a string. You could have used recursive functions only in VBA until the LAMBDA function has been released. Because the most of Excel users do not have access to the LAMBDA function, we will show you VBA version which any Excel user can use.
This function has only few rows as well. The function’s name is GetFilenameFromPath_Recursive and take a single argument named Path.
The first row is a logical test that checks if the last character in the argument is a backslash («») or not and if the argument is not an empty string. If the test is passed, the function returns itself with the argument without its last character and the last character of the path. This is where the recursion occurs.
The function runs itself until coming up a backslash («») or not a character left. It parses the characters from the right side and combines them with each run.
The last row contains a standard End If statement which determines where the If block ends.
Function GetFilenameFromPath_Recursive(ByVal Path As String) As String If Right$(Path, 1) <> "" And Len(Path) > 0 Then GetFilenameFromPath_Recursive = GetFilenameFromPath_Recursive(Left$(Path, Len(Path) - 1)) & Right$(Path, 1) End If End Function
Using LAMBDA to get filename from path
If you are Microsoft 365 subscriber, you can create recursive functions without using VBA. Briefly, the LAMBDA function is a special function that converts named ranges into user defined functions. Its syntax allows you to define arguments and a custom formula which uses that defined arguments.
For example, let’s say my custom function will have two arguments and returns multiplication of two arguments. All I need to is creating a named range, such as «MyLambda» and enter the following formula into Refers to box.
Syntax | Sample Formula | Sample Result |
=LAMBDA(x, y, x*y) | =MyLambda(2,3) | 6 |
If you call the named range «MyLambda» in the «MyLambda» function, you will create a recursive function. Same logic can be applied to VBA function at previous section.
The following is the LAMBDA version of our VBA code. The function’s name is GetFileNameFromPath_Lambda. Check out how the function calls itself after IF function’s logical test.
=LAMBDA(Path,IF(AND(RIGHT(Path,1)<>»»,LEN(Path)>0),GetFileNameFromPath_Lambda(LEFT(Path,LEN(Path)-1))&RIGHT(Path,1),»»))
Warning: Do not forget to update formula name in the formula if you change the named range’s name. Otherwise, the function returns #NAME? error due to incorrect function name.
Using LAMBDA Function with different approach
Alternatively, you can use the LAMBDA function without calling the «function name». The definition may sound complicated since you must call the function in the function by its name. This structure dictates you to update each occurrence of the name every time change the function’s name.
You can overcome this necessity by using another Microsoft 365-specific function called LET. The LET function allows you to define named ranges in a formula scope. You can define repeating values or blocks into these names and use them continuously.
If you define the name of the LAMBDA function in the formula, you can use the in-formula name over and over to make the function recursive. In our example, we create the name «Func» in the formula and call it within self. Outer LAMBDA function is to give the whatever name we want, «GetFileNameFromPath_LambdaMe».
=LAMBDA(Path,LET(Func,LAMBDA(ME,Path,IF(AND(RIGHT(Path,1)<>»»,LEN(Path)>0),ME(ME,LEFT(Path,LEN(Path)-1))&RIGHT(Path,1),»»)),Func(Func,Path)))
Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Еще…Меньше
Предположим, что вы хотите добавить в табличный отчет сведения, подтверждающие расположение книги и листа, чтобы быстро находить и идентифицировать их. Эту задачу можно решить несколькими способами.
Вставка текущего имени файла, его полного пути и имени активного листа
Введите или вставьте следующую формулу в ячейку, в которой нужно отобразить текущее имя файла с полным путем и именем текущего листа.
=ЯЧЕЙКА(«filename»)
Вставка текущего имени файла и имени активного листа
Введите или вставьте следующую формулу в виде формула массива, чтобы отобразить текущее имя файла и имя активного листа.
=ПРАВСИМВ(ЯЧЕЙКА(«filename»);ДЛСТР(ЯЧЕЙКА(«filename»))- МАКС(ЕСЛИ(НЕ(ЕОШ(ПОИСК(«»;ЯЧЕЙКА(«filename»); СТРОКА(1:255))));ПОИСК(«»;ЯЧЕЙКА(«filename»);СТРОКА(1:255)))))
Примечания:
-
Чтобы ввести формулу в виде формулы массива, нажмите клавиши CTRL+SHIFT+ВВОД.
-
Формула возвращает имя листа, если он был сохранен хотя бы один раз. Если вы используете эту формулу на несохраненном листе, ячейка формулы останется пустой, пока вы не сохраните лист.
Вставка только текущего имени файла
Введите или вставьте следующую формулу, чтобы вставить имя текущего файла в ячейку.
=ПСТР(ЯЧЕЙКА(«filename»);ПОИСК(«[«;ЯЧЕЙКА(«filename»))+1; ПОИСК(«]»;ЯЧЕЙКА(«filename»))-ПОИСК(«[«;ЯЧЕЙКА(«filename»))-1)
Примечание: Если вы используете эту формулу на несохраненном листе, вы увидите сообщение об ошибке #ЗНАЧ! в ячейке. После сохранения листа ошибка заменяется именем файла.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нужна дополнительная помощь?
Содержание
- Вставка в ячейку текущего имени файла Excel, пути или листа
- Вставка текущего имени файла, его полного пути и имени активного листа
- Вставка текущего имени файла и имени активного листа
- Вставка только текущего имени файла
- Дополнительные сведения
- Microsoft Excel
- Как получить список имен файлов, содержащихся в папке, а затем отобразить этот список на листе Excel
- Путь к текущей книге и новая функция LET
- Способ 1. Вручную
- Способ 2. Функция ЯЧЕЙКА
- Способ 3. Новая функция LET
- Путь к файлу
- Данная функция является частью надстройки MulTEx
- Excel получить имя файла с путем
Вставка в ячейку текущего имени файла Excel, пути или листа
Предположим, что вы хотите добавить в табличный отчет сведения, подтверждающие расположение книги и листа, чтобы быстро находить и идентифицировать их. Эту задачу можно решить несколькими способами.
Вставка текущего имени файла, его полного пути и имени активного листа
Введите или вставьте следующую формулу в ячейку, в которой нужно отобразить текущее имя файла с полным путем и именем текущего листа.
Вставка текущего имени файла и имени активного листа
Введите или вставьте следующую формулу в виде формула массива, чтобы отобразить текущее имя файла и имя активного листа.
=ПРАВСИМВ(ЯЧЕЙКА(«filename»);ДЛСТР(ЯЧЕЙКА(«filename»))- МАКС(ЕСЛИ(НЕ(ЕОШ(ПОИСК(«»;ЯЧЕЙКА(«filename»); СТРОКА(1:255))));ПОИСК(«»;ЯЧЕЙКА(«filename»);СТРОКА(1:255)))))
Чтобы ввести формулу в виде формулы массива, нажмите клавиши CTRL+SHIFT+ВВОД.
Формула возвращает имя листа, если он был сохранен хотя бы один раз. Если вы используете эту формулу на несохраненном листе, ячейка формулы останется пустой, пока вы не сохраните лист.
Вставка только текущего имени файла
Введите или вставьте следующую формулу, чтобы вставить имя текущего файла в ячейку.
Примечание: Если вы используете эту формулу на несохраненном листе, вы увидите сообщение об ошибке #ЗНАЧ! в ячейке. После сохранения листа ошибка заменяется именем файла.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Источник
Microsoft Excel
трюки • приёмы • решения
Как получить список имен файлов, содержащихся в папке, а затем отобразить этот список на листе Excel
В этой статье будет рассказано, как получить список имен файлов, содержащихся в каталоге, а затем отобразить этот список на листе. Данный способ связан с использованием макрофункции Excel 4 XLM в именованной формуле. Такой метод удобен, поскольку позволяет относительно легко выстроить на листе список имен файлов — обычно для этого требуются сложные макросы VBA.
Откройте новую книгу, а затем выполните следующие действия для создания именованной формулы.
- Выполните команду Формулы ► Присвоить имя, чтобы открыть диалоговое окно Создание имени.
- Впишите в поле Имя название Список.
- Введите следующую формулу в поле Диапазон (рис. 8.1): =ФАЙЛЫ(Лист1!$A$1) .
- Нажмите ОК, чтобы закрыть окно Создание имени.
Рис. 8.1. Работа с диалоговым окном для создания именованной формулы
Обратите внимание: функция ФАЙЛЫ не относится к стандартным функциям рабочего листа. Это макрофункция, написанная в сравнительно старом XLM-стиле и предназначенная для использования на специальном листе макросов. Она принимает один аргумент (путь к каталогу и описание файла) и возвращает массив имен файлов, содержащихся в данном каталоге и удовлетворяющих описанию файла. Обычные формулы рабочего листа не могут использовать подобные XLM-функции, а именованные формулы — могут.
Определив именованную формулу, введите в ячейку А1 путь к каталогу и описание файла. Например: C:Excelexpert.ru* *. Далее формула отображает первый найденный файл: =ИНДЕКС(Список;1) . Если изменить второй аргумент на 2, то будет отображен второй найденный файл и т. д. На рис. 8.2 приведен пример. Путь и описание файла указаны в ячейке А1. В ячейке А2 содержится следующая формула, скопированная далее по столбцу: =ИНДЕКС(Список;СТР0КА()-1) . Функция СТРОКА, используемая здесь, генерирует ряд последовательных натуральных чисел: 1,2,3 и т. д. Эти числа используются в качестве второго аргумента функции ИНДЕКС.
Рис. 8.2. Использование XLM-макроса в именованной формуле позволяет создать на листе список имен файлов
Обратите внимание: в ячейке А17 (и ниже) происходит ошибка. Дело в том, что в каталоге содержится всего 19 файлов и формула пытается отобразить имена несуществующих. Если изменить каталог или описание файла в ячейке А1, то формулы обновляются и выводят имена новых файлов.
Если вы пользуетесь такими приемами, то книгу нужно сохранить как файл с поддержкой макросов (в формате *.xlsm или *.xls).
Источник
Путь к текущей книге и новая функция LET
В повседневной работе с Microsoft Excel нередко возникают ситуации, когда хорошо было бы в какой-либо определенной ячейке вывести либо полный путь к текущей книге (от буквы диска до расширения), либо путь к текущей папке, где наша книга хранится. Сделать это можно несколькими способами.
Способ 1. Вручную
Идем в Файл — Сведения и жмём в верхней части кнопку Копировать путь (File — Info — Copy path) . После этого полный путь к текущей книге окажется у нас в буфере, откуда его можно вставить куда угодно стандартным образом (например, сочетанием клавиш Ctrl + V ).
Дешево и сердито, но при перемещении файла в другую папку придётся проделывать это всё ещё раз. Для автоматического обновления лучше использовать формулы.
Способ 2. Функция ЯЧЕЙКА
Уже очень давно в Excel есть встроенная функция ЯЧЕЙКА (CELL) , которая может выводить кучу разной полезной информации:
Если использовать её с аргументом «имяфайла» («filename») , то мы получим почти то, что нам нужно:
Останется только обрезать хвост после закрывающей квадратной скобки с помощью функций ЛЕВСИМВ (LEFT) и НАЙТИ (FIND) и убрать открывающую квадратную скобку функцией ПОДСТАВИТЬ (SUBSTITUTE) :
Способ 3. Новая функция LET
Как легко заметить, в предыдущей формуле дважды повторяется один и тот же фрагмент с функцией ЯЧЕЙКА. Чтобы немного сократить и упростить эту конструкцию, можно использовать новую обёрточную функцию LET:
Первым аргументом этой функции будет имя переменной (любое, например, s), вторым — значение этой переменной (наша функция ЯЧЕЙКА), третьим — результирующая формула с участием созданной переменной.
Источник
Путь к файлу
Данная функция является частью надстройки MulTEx
|
Вызов команды:
MulTEx -группа Специальные —Особые возможности —Путь к файлу
Команда поможет вставить в ячейки имена всех выбранных файлов или одного конкретного, всех файлов в указанной папке и её подпапках, а так же создать список файлов и папок в виде активных гиперссылок. Плюс к этому команда может отбирать файлы на основании указанной маски(шаблона), что позволит отбирать либо файлы определенного типа, либо с определенными именами.
Для чего это может быть нужно? При использовании надстройки некоторые команды требуют указания полного пути к файлу или имен файлов(например команды: Пакетное переименование файлов, Отправка листа/книги по почте, Создание примечаний). С помощью команды Путь к файлу это можно сделать быстро и главное правильно.
Т.к. команда умеет создавать гиперссылки на файлы и папки, то можно создавать списки нужных файлов и папок для быстрого доступа к ним из одного листа.
Просматривать файлы:
- только выбранные — после нажатия кнопки ОК появится диалоговое окно, в котором необходимо выбрать файлы для создания списка
- все в папке — после нажатия кнопки ОК появится диалоговое окно выбора папки. Выбирается папка, файлы в которой необходимо просмотреть и создать список
включая подпапки — доступно для пункта все в папке. Если установлен, то файлы будут просматриваться не только в указанной папке, но и во всех вложенных в неё папках до самой глубоко вложенной. Если отключен, то файлы будут просматриваться исключительно в указанной папке.
Отбирать файлы
- все — будет создан список со всеми файлами без исключений
- на основании маски — в данном случае в поле указывается шаблон и будут отбираться файлы, отвечающие маске шаблона. Например, если необходимо отбирать только файлы Excel, то можно указать маску: *.xls* . Если надо отбирать только файлы Word, содержащие в имени слово «инструкция», то маску можно задать как: *инструкция*.doc* .
Записать
- начиная с ячейки — указывается ячейка, начиная с которой будет записан результат. Если отобрано более одного файла/папки, то первый файл/папка записывается в указанную ячейку, а остальные в ячейки ниже. В каждой ячейке один файл/папка.
исключить одинаковые папки — доступно при записи пути к папкам. Если установлен, то из результирующего списка папок будут исключены одинаковые пути к папкам. Может пригодиться для исключения задвоения путей, когда в одной папке находится несколько файлов для создания списка.
без расширения типа файла — доступно при записи имен файлов. В этом случае в ячейки записывается только имя файла, расширение файла не записывается.
Записать как гиперссылки — независимо от того, какой вариант записи выбран(пути к файлам или папкам), в ячейках можно создать гиперссылки на исходные файлы/папки. По нажатии на такую гиперссылку будет открыт исходный файл или папка. Файлы в этом случае открываются в программе, установленной по умолчанию для просмотра данного типа файлов. Например, файлы .doc будут открываться в Word, файлы .xls в Excel.
Источник
Excel получить имя файла с путем
Модератор форума: китин, _Boroda_
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как вписать имя файла в ячейку формулой. (Макросы/Sub)
Как вписать имя файла в ячейку формулой.
koyaanisqatsi | Дата: Пятница, 23.05.2014, 14:44 | Сообщение № 1 | |
|
Mojakhed 0 / 0 / 0 Регистрация: 23.10.2012 Сообщений: 13 |
||||||||
1 |
||||||||
Как получить путь к файлу и имя этого файла в переменные23.10.2012, 11:58. Показов 89685. Ответов 22 Метки нет (Все метки)
Добрый день, Задача проста, есть решение, но оно не изящное, хотелось бы оптимизировать код. Все делается в VBA Excel 2010. 1. Получаем Имя файла
2. Получаем Путь к файлу (код не мой, помог Гугл)
Заранее спасибо
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
23.10.2012, 11:58 |
22 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
23.10.2012, 12:17 |
2 |
|||
fName в первом коде — полный путь к файлу. Вы хотите разделить его на путь к папке и имя?
2 |
0 / 0 / 0 Регистрация: 23.10.2012 Сообщений: 13 |
|
23.10.2012, 15:18 [ТС] |
3 |
Благодарю, вопрос исчерпан.
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
23.10.2012, 17:30 |
4 |
|||
Так попробуйте в первом коде:
Получите «полный путь к этому файлу, а так же его имя в отдельные переменные».
0 |
0 / 0 / 0 Регистрация: 23.10.2012 Сообщений: 13 |
|
23.10.2012, 19:14 [ТС] |
5 |
To Hugo121 Наверное я не достаточно четко сформулировал задачу, в любом случае, Казанский помог с решением проблемы. Я получил что хотел. В следующий раз буду четко формулировать. Спасибо.
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
23.10.2012, 20:55 |
6 |
|||
Ну когда есть полный путь и имя — легко от полного пути отрезать на длину имени…
0 |
rattrapper foo(); 886 / 587 / 222 Регистрация: 03.07.2013 Сообщений: 1,549 Записей в блоге: 2 |
||||||||
09.07.2013, 16:29 |
7 |
|||||||
нужна помощь, у меня код не работает(exel’13)
Импорт модуля проекта из файла
у меня нужные модули находятся в том же месте, что и книга, но я никак не могу получить полный путь к книге программно!
Добавлено через 36 минут
никак не могу получить полный путь к книге программно как же все просто)
0 |
ExpressFX 2 / 2 / 0 Регистрация: 24.10.2015 Сообщений: 1 |
||||
24.01.2016, 18:54 |
8 |
|||
Пути к файлу и имя файла — просто как 2+2 !
Выйдет сообщение:
2 |
4 / 4 / 0 Регистрация: 29.06.2015 Сообщений: 17 |
|
29.01.2016, 13:41 |
9 |
ActiveWindow.Caption возвращает имя открытого окна, т.е. имя файла без расширения.
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
29.01.2016, 15:20 |
10 |
|||
Федоров, …если заголовок окна не поменяли
0 |
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
18.03.2016, 14:08 |
11 |
доброго дня всем, подскажите, а как теперь получаемые ответы вывести в ячейку? и чтоб без диалогового окна? просто выбор файла, а результат в ячейке, а не в окне.
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
18.03.2016, 14:19 |
12 |
|||
Вместо Msgbox пишите
— получите вместо сообщения строку в ячейке.
1 |
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
18.03.2016, 15:24 |
13 |
благодарю, то что надо Добавлено через 1 минуту
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
18.03.2016, 16:12 |
14 |
Используете ДВССЫЛ()? Она не в всех формулах работает. Если всё равно используете макрос — так сразу и формируйте макросом полностью формулы, или вообще делайте всю работу макросом.
0 |
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
21.03.2016, 07:20 |
15 |
ДВССЫЛ не успользую, а в макросах не силен совсем.
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||||||
21.03.2016, 09:22 |
16 |
|||||||
Попробуйте после замены файла
или
0 |
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
21.03.2016, 11:04 |
17 |
нет, не работает ни в теле первого макроса, ни с отдельной кнопки((
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
21.03.2016, 11:30 |
18 |
Попробуйте так — копируете любой файл клиента под именем например шаблон.xls, настраиваете все нужные формулы на импорт из этого файла.
0 |
Ivan_Ivanovich 0 / 0 / 0 Регистрация: 01.02.2016 Сообщений: 29 |
||||||||
14.04.2016, 09:59 |
19 |
|||||||
Здравствуйте, а подскажите пожалуйста как сделать так, чтобы можно было просто выбирать файл через диалоговое окно, не указывая при этом путь к файлу и само название файла. Нужно, чтобы была возможность выбрать любой файл на компьютере .xlsx и далее с ним работать (импортировать из него).
А вот продолжение кода в форме, при помощи которого 100% идет выбор файла (только автоматически, по прописанному пути и файлу, а нужно, чтобы можно было любой файл выбрать, чтобы не был заранее прописан код для файла) и уже выполнялась работа с ним.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
14.04.2016, 10:04 |
20 |
Т.е. не пробовали то, что я предлагаю?
0 |
Предположим, у вас есть рабочий лист, содержащий список путей к файлам, теперь вы хотите извлечь только имя файла (правая часть последней обратной косой черты) из каждого пути, как показано на следующих снимках экрана. Есть ли какие-нибудь быстрые приемы для решения этой задачи?
Извлечь имя файла из полного пути с формулой в Excel
Извлечь имя файла из полного пути с помощью функции, определяемой пользователем
Извлечь имя файла из полного пути с кодом VBA
Извлечь имя файла из полного пути с формулой в Excel
В Excel вы можете использовать приведенную ниже формулу, чтобы быстро извлечь только имя файла из полного пути.
Выберите пустую ячейку, введите в нее приведенную ниже формулу и нажмите Enter .
=MID(A1,FIND(«*»,SUBSTITUTE(A1,»»,»*»,LEN(A1)-LEN(SUBSTITUTE(A1,»»,»»))))+1,LEN(A1))
Tips: A1 — это ячейка, из которой вы хотите извлечь имя файла), и нажмите кнопку Enter, затем перетащите маркер заполнения, чтобы заполнить нужный диапазон. После этого имя файла извлекается из каждой ячейки.
Извлечь имя файла из полного пути с помощью функции, определяемой пользователем
С помощью следующей функции, определяемой пользователем, вы можете легко и быстро получить имя файла.
1. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.
2. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.
Function FunctionGetFileName(FullPath As String) As String
'Update 20140210
Dim splitList As Variant
splitList = VBA.Split(FullPath, "")
FunctionGetFileName = splitList(UBound(splitList, 1))
End Function
3. Нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно и вернитесь к рабочему листу. В пустой ячейке, например B1, введите в нее приведенную ниже формулу и нажмите Enter .
=FunctionGetFileName(A1)
Затем снова выберите ячейку B1, перетащите маркер заполнения в диапазон, в котором вы хотите применить эту формулу, и все имена файлов были извлечены из полных путей, как следующий результат:
Извлечь имя файла из полного пути с кодом VBA
Помимо функции, определяемой пользователем, код VBA также может помочь вам извлечь имена файлов. Пожалуйста, сделайте так:
1. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.
2. Нажмите Вставить > Модулии вставьте следующий код в окно модуля.
Sub GetFileName()
'Update 20140210
Dim Rng As Range
Dim WorkRng As Range
Dim splitList As Variant
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
For Each Rng In WorkRng
splitList = VBA.Split(Rng.Value, "")
Rng.Value = splitList(UBound(splitList, 1))
Next
End Sub
3, Затем нажмите F5 ключ для запуска этого кода и выберите диапазон, из которого вы хотите извлечь имя файла, см. снимок экрана:
4, Затем нажмите OK, имена файлов были извлечены из выбора следующим образом:
Внимание: С этим кодом VBA исходные данные будут уничтожены, поэтому вы должны скопировать их перед применением этого кода.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Jonych Пользователь Сообщений: 26 |
Приветствую. Изменено: Jonych — 13.01.2016 02:57:14 |
KL Пользователь Сообщений: 2186 |
Так? Прикрепленные файлы
|
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Доброе время суток |
Jonych Пользователь Сообщений: 26 |
Спасибо за решение. |
KL Пользователь Сообщений: 2186 |
Как показано в файле от Андрей VG |
KL Пользователь Сообщений: 2186 |
Можно еще так если хотите ссылаться на реальную ячейку в данном файле, чтобы динамически менять адрес: Изменено: KL — 01.03.2016 11:57:00 |
Jonych Пользователь Сообщений: 26 |
#7 14.01.2016 00:46:44
Хм. Только сейчас понял, что он выдает путь на …Desktop, хотя файл находится абсолютно в другой папке: C:UsersName1DropboxFolder
выдает C:UsersName1Desktop |
||||
KL Пользователь Сообщений: 2186 |
Формула =ЯЧЕЙКА(«filename») выдает путь именно к тому файлу, в котором используется и не ошибается |
Jonych Пользователь Сообщений: 26 |
Вроде всё проверил, что не так? |
KL Пользователь Сообщений: 2186 |
Все так, но ДВССЫЛ работает только с открытыми файлами |
Jonych Пользователь Сообщений: 26 |
Вот тут то вся и беда). Так как файл, который подбирает инфу из других файлов находится в дропбоксе, то путь постоянно меняется. + по завершению месяца переносится в отдельную папку. Использую ctrl+h и замену пути. Получается, автоматизировать данный процесс не получится. Изменено: Jonych — 14.01.2016 02:01:34 |
KL Пользователь Сообщений: 2186 |
|
Jonych Пользователь Сообщений: 26 |
Примерно понял, что делают эти функции и как работает, но у меня больше тысячи ячеек :P. Писать скрипт по каждой — неверный метод) |
KL Пользователь Сообщений: 2186 |
Ну тогда вариантов почти не остаётся. Если файл используется только вами и не предназначен для рассылки, то поинтересуйтесь надстройкой написанной Laurent Longre, в которой есть функция листа INDIRECT.EXT или надстройкой написанной Harlan Grove, где есть функция листа PULSE. Я их сам не пробовал, но когда-то рекомендовали как решение. Вполне возможно, что за давностью лет они и перестали работать в последних версиях Excel, но может имеет смысл попытать счастья. Удачи. добавлено: фунция PULSE, похоже, использует ADO, так что наверняка медленная. Изменено: KL — 15.01.2016 02:25:49 |
Jonych Пользователь Сообщений: 26 |
Ок. Спасибо вам большущее за помощь, буду пробовать |
Jonych Пользователь Сообщений: 26 |
#16 15.01.2016 02:43:12 Хотя, у меня только что появилась идея, как реализовать через VBA.
А так как путь у нас постоянный: =’C:DropboxFolder[03.xlsm]Текущий день’!$AJ$23, за исключением всего, что написано до символа «[«, то можно далее добавить замену символов до «[» на то, что получается в B1 во всех ячейках. Реализуемо? Изменено: Jonych — 15.01.2016 03:48:45 |
||
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#17 15.01.2016 09:57:01
Кирилл, что-то меня терзают смутные сомнения…Если не указать второй аргумент(адрес ячейки), то функция вернет путь до активного на момент пересчета файла, а не путь до файла с функцией. Т.е. корректней будет так: Jonych, я так до конца и не понял, что Вам надо. Возможно, какой-нибудь вариант на макросах из моей статьи подойдет: Как получить данные из закрытой книги? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
KL Пользователь Сообщений: 2186 |
The_Prist, согласен |
Jonych Пользователь Сообщений: 26 |
Если все-таки решу вопрос, то отпишусь) спасибо за помощь!) |
Jonych Пользователь Сообщений: 26 |
Все-таки не получилось). Перейти на one-drive с динамическими путями (в зависимости от пользователя компа) не получится. Остается Dropbox со стационарным путем C:DropboxПапкафайлы.xlsx |
Jonych Пользователь Сообщений: 26 |
Накопал идею: http://forum.msexcel.ru/index.php?topic=1920.0 . Там много всего, но смысл в том, чтобы сделать кнопку «обновить данные», и по нажатию в невидимом режиме открывается 31 файл, данные обновляются, файлы закрываются. |
Hugo Пользователь Сообщений: 23249 |
#22 02.02.2016 15:00:58
и как же тогда «Реализация без VBA»? |
||
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Jonych Пользователь Сообщений: 26 |
#24 02.02.2016 17:02:25
Если других вариантов нет, пробуем такой) |
||
Jonych Пользователь Сообщений: 26 |
#25 01.03.2016 01:03:30 Заказал за 300р на фрилансе скрипт. Прикладываю ниже:
|
||
vaspup88 Пользователь Сообщений: 54 |
#26 21.09.2019 15:26:34 Здравствуйте! Помогите, я знаю. вам это будет легко
как вывести пусть файла в определенную ячейку? Изменено: vaspup88 — 21.09.2019 16:07:05 |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
vaspup88, код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение. |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#28 21.09.2019 15:51:07
|
||
vaspup88 Пользователь Сообщений: 54 |
#29 21.09.2019 16:07:50
сделал Изменено: vaspup88 — 21.09.2019 16:08:14 |
||
vaspup88 Пользователь Сообщений: 54 |
#30 21.09.2019 18:59:52 а как сократить весь путь до имени файла с расширением? причем с выводом в определенную ячейку Изменено: vaspup88 — 21.09.2019 20:29:43 |
Перейти к содержимому раздела
Форумы CADUser
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Дерево сообщений Активные темы Темы без ответов
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
#1 28 ноября 2008г. 20:19:34
- kp
- Восстановленный участник
- На форуме с 17 марта 2005г.
- Сообщений: 254
- Спасибо: 0
Тема: Как в VBA получить имя файла из строки полного пути к нему?
Как в VBA получить имя файла из строки полного пути к нему?
В Лиспе есть vl-filename-base, а как такое провернуть в VBA? Подскажите, PLS
#2 Ответ от Vildar 28 ноября 2008г. 22:33:31
- Vildar
- Активный участник
- Откуда: Саратов
- На форуме с 15 августа 2008г.
- Сообщений: 574
- Спасибо: 11
Re: Как в VBA получить имя файла из строки полного пути к нему?
А кто его знает шо такое vl-filename-base
У нас через Doc.Name
Ну а из строки с полным путем к фаулу, ессно через строковый функции, inStr(inStrRev), Mid, и т.д. Находишь позишн последнего слэша, и через Left получаешь строку после него.
Поняно?
#3 Ответ от LeonidSN 28 ноября 2008г. 22:56:15
- LeonidSN
- Активный участник
- На форуме с 30 мая 2005г.
- Сообщений: 1,480
- Спасибо: 5
Re: Как в VBA получить имя файла из строки полного пути к нему?
#4 Ответ от kp 1 декабря 2008г. 11:24:43
- kp
- Восстановленный участник
- На форуме с 17 марта 2005г.
- Сообщений: 254
- Спасибо: 0
Re: Как в VBA получить имя файла из строки полного пути к нему?
LeonidSN, спасибо
#5 Ответ от Михаил 1 декабря 2008г. 12:04:56
- Михаил
- Восстановленный участник
- На форуме с 9 марта 2008г.
- Сообщений: 55
- Спасибо: 0
Re: Как в VBA получить имя файла из строки полного пути к нему?
Function FlExtractFileName(FileName As String) As String ' вытаскивает название файла с расширением, из полного имени файла, т.е из c:1.xxx получит 1.xxx Dim stpos As Long stpos = InStrRev(FileName, "") FlExtractFileName = Right$(FileName, Len(FileName) - stpos) End Function Function FlGetProjectName() As String ' узнать полное имя проекта Dim app As AcadApplication Set app = ThisDrawing.Application FlGetProjectName = app.VBE.ActiveVBProject.FileName End Function
#6 Ответ от kp 3 декабря 2008г. 17:19:27
- kp
- Восстановленный участник
- На форуме с 17 марта 2005г.
- Сообщений: 254
- Спасибо: 0
Re: Как в VBA получить имя файла из строки полного пути к нему?
> Михаил
СПАСИБО!
#7 Ответ от SmeL 10 декабря 2008г. 11:35:07
- SmeL
- Активный участник
- Откуда: Молдова
- На форуме с 29 сентября 2005г.
- Сообщений: 464
- Спасибо: 1
Re: Как в VBA получить имя файла из строки полного пути к нему?
> Михаил
Код работает на 50%
#8 Ответ от Boxa 10 декабря 2008г. 13:54:04
- Boxa
- Восстановленный участник
- На форуме с 16 августа 2005г.
- Сообщений: 60
- Спасибо: 0
Re: Как в VBA получить имя файла из строки полного пути к нему?
Такой код всегда работает и всегда на 100%
Sub asfff_01() Dim path_0 As String Dim temp As Variant Dim files_0 As String path_0 = "c:dhhhfjjjtur1.txt" temp = Split(path_0, "") files_0 = temp(UBound(temp)) End Sub
#9 Ответ от SmeL 10 декабря 2008г. 14:56:18
- SmeL
- Активный участник
- Откуда: Молдова
- На форуме с 29 сентября 2005г.
- Сообщений: 464
- Спасибо: 1
Re: Как в VBA получить имя файла из строки полного пути к нему?
> Boxa
Код работает на 50%
поверь мне
#10 Ответ от Boxa 10 декабря 2008г. 18:58:15
- Boxa
- Восстановленный участник
- На форуме с 16 августа 2005г.
- Сообщений: 60
- Спасибо: 0
Re: Как в VBA получить имя файла из строки полного пути к нему?
SmeL опиши пожалуйста случай в котором приведенный мной код дает осечку… мне действительно интересно, так как мне видится тут все логично: строка пути разбивается в массив, после чего берется последний элемент массива, значение которого это имя файла.
#11 Ответ от SmeL 11 декабря 2008г. 10:49:25
- SmeL
- Активный участник
- Откуда: Молдова
- На форуме с 29 сентября 2005г.
- Сообщений: 464
- Спасибо: 1
Re: Как в VBA получить имя файла из строки полного пути к нему?
Данный путь коректный для Windows «c:dhhhfjjjtur/01.txt», извлеки из него имя файла
#12 Ответ от Boxa 11 декабря 2008г. 13:12:30
- Boxa
- Восстановленный участник
- На форуме с 16 августа 2005г.
- Сообщений: 60
- Спасибо: 0
Re: Как в VBA получить имя файла из строки полного пути к нему?
согласен, не извлечет.
Хотя с другой стороны система при запросе не возвращает такой путь.
Сообщения 12
Тему читают: 1 гость
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Скачать пример рабочей книги
Загрузите образец книги
Из этого туториала Вы узнаете, как получить путь и имя файла с помощью формулы в Excel.
Получить путь и имя файла
В Excel нет функции для получения пути и имени файла напрямую, но функция CELL вернет путь к файлу, имя и лист. Используя текстовые функции FIND, LEFT и SUBSTITUTE, мы можем изолировать путь и имя файла.
1 | = ПОДСТАВИТЬ (ЛЕВЫЙ (ЯЧЕЙКА («имя файла»; B2), НАЙТИ («]», ЯЧЕЙКА («имя файла»; B2)) — 1), «[«, «») |
Давайте рассмотрим формулу.
Имя файла, путь и рабочий лист
Мы используем функцию CELL, чтобы вернуть путь к файлу, имя и лист, введя «имя файла» в качестве типа информации.
1 | = ЯЧЕЙКА («имя файла»; B2) |
НАЙТИ положение имени файла
Как показано выше, функция CELL возвращает путь к файлу, имя и рабочий лист. Нам не нужен рабочий лист или квадратные скобки, поэтому мы используем функцию НАЙТИ, чтобы определить позицию последнего символа (то есть того, который стоит перед «]») в имени файла.
Удалить имя рабочего листа
Когда у нас есть позиция последнего символа имени файла, мы используем функцию LEFT, чтобы удалить имя рабочего листа.
ЗАМЕНА Функция
Выше вы можете видеть, что между путем и именами файлов все еще есть открытая квадратная скобка. Используйте функцию ЗАМЕНА, чтобы заменить «[» пустой строкой.
1 | = ПОДСТАВИТЬ (D3; «[«; «») |
Объединение этих шагов в единую формулу дает нам:
1 | = ПОДСТАВИТЬ (ЛЕВО (ЯЧЕЙКА («имя файла»; B2), НАЙТИ («]», ЯЧЕЙКА («имя файла»; B2)) — 1), «[«, «») |
Получить только путь
Возможно, вы захотите показать только путь без имени файла. Для этого мы можем остановиться на функции LEFT с небольшой настройкой. Заменить не нужно, так как не будет никаких символов в середине строки, которые нужно удалить. Чтобы вернуть только путь, мы находим позицию первого символа имени файла («[«), а не последнего, а имя пути — все слева.
1 | = ЛЕВЫЙ (ЯЧЕЙКА («имя файла»; B2); НАЙТИ («[«; ЯЧЕЙКА («имя файла»; B2)) — 1) |