Разделить строку на первый разделитель
У меня есть столбец с длинным списком имен файлов и файлов. Папки и имена файлов различаются. Я хочу извлечь имя файла из столбца в другой столбец, но я изо всех сил стараюсь сделать это в Excel.
Пример данных столбца: (файлы и папка изменены, чтобы скрыть детали, которые не должны быть общедоступными)
c:\data\1\nc2\media\ss\system media\ne\d - wnd enging works v5.swf c:\data\1\nc2\media\ss\special campaigns\samns dec 2012\trainerv5.swf C:\Local\Messages\17362~000000001~20131231235910~4.MUF c:\data\1\nc2\media\ss\system media\tl\nd - tfl statusv4.swf c:\data\1\nc2\media\ss\system media\core\ss_bagage v2.swf
Я знаю, что должен иметь возможность искать справа от первого появления «\», но я не могу понять синтаксис.
- Изменить формат ячейки, но не размер номера?
- Excel VLOOKUP или INDEX MATCH
- Исправлена формула excel (не зависящая от движущейся ячейки)
- Согласование ячеек с массивами
- Несколько операторов «IF» в Excel, но с использованием той же фразы
Большое спасибо
ОБНОВИТЬ:
Формула =RIGHT(B2,LEN(B2)-SEARCH("\",B2,1))
должна работать, но она показывает неправильные результаты. Но если я поменяю его на поиск "." он вытаскивает расширение файла. Итак, есть ключевой элемент, который мне не хватает
- Как получить максимальные числа N в строке в Excel?
- замените # N / A пустым при применении формулы массива за пределами диапазона
- Динамическая начальная точка формулы OFFSET и SUM
- Минуты прошедших дней, за исключением выходных и праздничных дней
- Excel, конденсировать таблицу, если ячейки не имеют ценности
- В электронной таблице нужно найти, отображаются ли текстовые значения из диапазона ячеек внутри одной ячейки, которая содержит длинную строку текста
- Формула, приводящая к 0 в ячейке, но в окне функции дает правильный ответ
- Не удалось восстановить эту формулу в Excel
=RIGHT(A1,LEN(A1)-FIND("~",SUBSTITUTE(A1,"\","~",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))
скопируйте его в любой столбец, скажите b, перетащите вниз, вы закончите
VBA – более эффективный вариант, если у вас много файлов для разбора. Создайте модуль и добавьте следующее:
Function GetFileName(file As String) As String Set fso = CreateObject("Scripting.FileSystemObject") GetFileName = fso.GetFileName(file) End Function
Существует несколько различных способов получить текст после последней косой черты в строке, включая следующую формулу. В этом примере H15 – это ячейка, содержащая строку для поиска. Если он не может найти косой черты, он возвращает символ «-» (тире).
=iferror(RIGHT(H15,LEN(H15)-SEARCH("|",SUBSTITUTE(H15,"/","|",LEN(H15)-LEN(SUBSTITUTE(H15,"/",""))))),"-")
Сначала формула находит количество слэшей в строке. LEN дает общую длину строки, а LEN строки без косых черт после использования SUBSTITUTE для устранения косых черт в исходной строке – разница в числе косых черт.
Затем вы заменяете знак маркера (я использовал «|») для последней косой черты. При поиске маркера вы обнаружите, где бит после начала косой черты. Общая длина строки минус, где начинается маркер, указывает, сколько символов нужно брать справа, что вы затем делаете.
Если вам нужен более общий синтаксический анализ строк и вы готовы использовать немного VBA, вы можете использовать функцию split
предложенную Джейми Буллом в его ответе на этот вопрос в SuperUser.
Его функция будет использовать любой персонаж, который вы хотите разбить на сегменты, и вернуть какой бы сегмент вы ни выбрали.
Я скопировал функцию Джейми здесь для удобства:
Function STR_SPLIT(str, sep, n) As String Dim V() As String V = Split(str, sep) STR_SPLIT = V(n - 1) End Function