Відповіді:
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")
Ця формула стане корисною, якщо у вас є кілька точок у імені файлу
Взяте з іншої відповіді (змінено на пошук крапок, а не пробілів):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
Відповідь Кирила працює лише в тому випадку, якщо розширення становить 3 або 4 символи, а відповідь user273281 не працює, коли .
в імені файлу були (періоди).
Отже, я придумав новий спосіб досягти цього,
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
Примітка: відповідач користувача273281 не працював у випадку, коли було ім'я файлу 1. Macro based file.zip
. Це повертається. Macro based file.zip
Якщо припустити, що у вас добре відформатовані розширення, ви можете це швидко зробити =RIGHT(A1,3)
. Більш надійне рішення знайде індекс крайнього правого краю, .
а потім вилучить решта символів.
Я натрапив на це, що є найпростішим рішенням, який я бачив ...
=SUBSTITUTE(RIGHT(SUBSTITUTE(A5,".",REPT(".",50)),50),".","")
Це працює, тому що відділяє будь-які символи після останнього періоду від усіх інших символів на 50 періодів, або будь-яке число, яке ви обрали. Потім ви можете вибрати найменші 50 символів, знаючи, що ви вибираєте не що інше, як розширення символів та купу періодів. Замініть періоди, і ви готові їхати.
Альтернатива: XML Парсинг
Акуратний трюк, який я іноді використовую для розбору рядків в цілому, полягає у використанні FilterXML()
функції (Excel 2013 та новіших версій). Основна стратегія полягає у використанні Substitute()
для форматування рядка таким чином, щоб він був розбитий по елементах в XML-рядку, а потім ви можете використовувати синтаксис xpath для зручної навігації по розібраним елементам. Використовуючи цю стратегію, отримання розширення буде виглядати приблизно так ...
=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]")
Якщо ви не знайомі з xml, це може здатися залякаючим, але якщо ви можете зрозуміти, що відбувається, я вважаю, що він чистіший, гнучкіший та легший для запам'ятовування, ніж альтернативні підходи із використанням len (), substitute (), тощо. Однією з причин, чому це приємніше, є те, що є лише одна посилання на клітинку.
Незаконні персонажі
Є два символи, дозволені в шляхах, але не в xml: &
і'
Вище рівняння буде працювати, якщо цих символів немає, інакше з ними потрібно буде обробити щось подібне ...
=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")
Приклад
Припустимо, у нас такий неприємний шлях до файлу:
C: \ Folder1 \ Folder2 \ (потворні символи! @ # $% ^ () _ + = {} ;;, `) \ two.dots.LongExt
1.) Substitution()
Частина перетворить його в рядок XML, як це ...
<A>
<p>
C:\Folder1\Folder2\(ugly characters !@#$%^()_+={};;,`)\two
</p>
<p>
.dots
</p>
<p>
.txt
</p>
</A>
2.) Після форматування подібним чином, тривіально вибрати останній p
елемент за допомогою синтаксису xpath //p[last()]
.
REGEXEXTRACT(A1, "\.([^.]*)$")