Respostas:
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")
Essa fórmula será útil se você tiver mais de um ponto no nome do arquivo
Retirado de outra resposta (alterado para procurar pontos e não espaços):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
A resposta Cyril funciona apenas se a extensão tiver 3 ou 4 caracteres e a resposta user273281 não funcionou quando havia .(pontos) no nome do arquivo.
Por isso, descobri uma nova maneira de conseguir isso,
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
Nota: o respondedor de user273281 não funcionou para o caso em que o nome do arquivo estava 1. Macro based file.zip. Retorna. Macro based file.zip
Supondo que você tenha extensões bem formatadas, você pode fazer isso rapidamente como =RIGHT(A1,3). Uma solução mais robusta encontraria o índice da direita .e extrairia os caracteres restantes.
Me deparei com isso, que é a solução mais simples que eu já vi ...
=SUBSTITUTE(RIGHT(SUBSTITUTE(A5,".",REPT(".",50)),50),".","")
Funciona porque separa todos os caracteres após o último período de todos os outros caracteres por 50 períodos, ou qualquer número que você escolher. Você pode selecionar os 50 caracteres mais à direita, sabendo que não está selecionando nada além de seus caracteres de extensão e vários períodos. Substitua os períodos e você está pronto para ir.
Alternativa: Análise XML
Um truque interessante que às vezes uso para análise de string em geral é alavancar a FilterXML()função (Excel 2013 e posterior). A estratégia básica é usar Substitute()para formatar sua cadeia de caracteres de forma que ela seja analisada entre elementos em uma cadeia de caracteres xml e, em seguida, você pode usar a sintaxe xpath para navegar convenientemente por seus elementos analisados. Usando essa estratégia, obter uma extensão ficaria assim ...
=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]")
Se você não conhece o xml, isso pode parecer intimidador, mas se você consegue entender o que está acontecendo, acho que é mais limpo, mais flexível e mais fácil de lembrar do que as abordagens alternativas que usam len (), substitute (), etc. Uma razão pela qual é melhor é porque há apenas uma referência de célula.
Personagens Ilegais
Existem dois caracteres permitidos nos caminhos, mas não no xml: &e'
A equação acima funcionará se esses caracteres não estiverem presentes; caso contrário, eles precisarão ser manipulados com algo assim ...
=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")
Exemplo
Suponha que tenhamos um caminho de arquivo desagradável como este:
C: \ Pasta1 \ Pasta2 \ (caracteres feios! @ # $% ^ () _ + = {} ;;, `) \ two.dots.LongExt
1.) A Substitution()parte irá convertê-lo em uma string xml como esta ...
<A>
<p>
C:\Folder1\Folder2\(ugly characters !@#$%^()_+={};;,`)\two
</p>
<p>
.dots
</p>
<p>
.txt
</p>
</A>
2.) Depois de formatado assim, é trivial escolher o último pelemento usando a sintaxe xpath //p[last()].
REGEXEXTRACT(A1, "\.([^.]*)$")