Lista das funções do Excel (em PowerBI)

sábado, 9 de junho de 2012

Formula de Excel para obter nome do ficheiro numa célula

Olá!
No outro dia foi-me colocada uma duvida incomum, colocado pelo Bruno Castro.
Como colocar o nome do ficheiro numa célula através de uma formula?
Não há nada que não se consiga fazer em Excel! :-)
Uma das soluções foi utilizar uma combinação de funções de texto com uma função de informações.
Esta foi a formula indicada.

=SEG.TEXTO(CÉL("nome.ficheiro");LOCALIZAR("[";CÉL("nome.ficheiro");1)+1;LOCALIZAR("]";CÉL("nome.ficheiro");1)-LOCALIZAR("[";CÉL("nome.ficheiro");1)-6)

Em Português! Noutros idiomas é necessário adaptar o nome das funções. Convém ainda realçar que estranhamente também existem diferenças entre o Português de Portugal e do Brasil!?

Vamos agora disseca-la!
A função SEG.TEXTO é a função principal. É a ultima a ser realizada. Esta vai devolver-nos os n caracteres que compõem o nome.



São 3 argumentos:
1 - Texto: é a cadeia de texto que contém os caracteres que deseja extrair. Que no nosso caso é o nome do ficheiro. Então aqui vamos usar a função CÉL para obter o endereço completo do ficheiro. CÉL("nome.ficheiro")




Esta é uma função que devolve informações sobre alguns objectos do Excel, neste caso o endereço completo do ficheiro. Veja o resultado da célula B2 da imagem seguinte.



2 - Núm_inicial: é a posição do primeiro caracter que deseja extrair.
Aqui reside uma parte muito importante do resultado. Com a função LOCALIZAR vamos identificar sempre em que posição está o "[". Se repararmos com atenção podemos confirmar que o nome do ficheiro aparece sempre entre parênteses rectos. Logo, a posição inicial será sempre essa mais 1, para não incluir o próprio parêntese. Neste exemplo começa no 42º caracter.
LOCALIZAR("[";CÉL("nome.ficheiro");1)+1



3 - Núm_caract: especifica quantos caracteres devem ser devolvidos de texto.
Nesta variável precisamos saber quantos caracteres fazem parte do nome. Apesar de ser um numero variável, podemos usar uma formula que resulta na perfeição.
LOCALIZAR("]";CÉL("nome.ficheiro");1)-LOCALIZAR("[";CÉL("nome.ficheiro");1)-6

Até ao primeiro sinal de subtração, a função calcula a posição do caracter " ] ". Na segunda parcela calcula a posição do caracter " [ ". Logo a respectiva subtracção representa o numero de caracteres a extrair!
Então porquê o -6? Porque neste caso não quero a extensão do ficheiro. A parte " .xlsx] " é removida do resultado.
Se por acaso o ficheiro tiver uma extensão com 3 letras, tipo .xls, deverá substituir o 6 por 5.

Agora era engraçado substituir esta constante por uma função do género que verifique quantos caracteres tem a extensão do ficheiro. :-)
Fica lançado o desafio!

Se quiser verificar directamente no Excel, pode fazer o Download aqui!



Por: Paulo Costa
       pcosta71@gmail.com

3 comentários:

  1. Mto bem...
    só que se fores abrir o ficheiro no office em inglês dá erro #VALUE!

    Como fazer para funcionar com office em PT e em inglês??

    ResponderEliminar
    Respostas
    1. O Excel por defeito adapta automaticamente o nome das funções à língua que está a abrir o respectivo ficheiro.
      O mesmo já não acontece aos nomes das variáveis.
      Experimenta alterar nome.ficheiro por filename. Deve ser suficiente.
      Além disso lembrar que o livro tem se ser guardado previamente.

      Eliminar
    2. Exacto. eu sei disso. alterando 'nome.ficheiro' para 'filename' resulta.
      O problema é quando tens uma versão PT em casa e uma versão EN no trabalho ou vice-versa.
      Se os parâmetros da função CÉL fossem numéricos é que era bom, mas já procurei na net e parece q não são. Foi uma ideia triste da Microsoft escolher parâmetros deste género.

      Eliminar

Nota: só um membro deste blogue pode publicar um comentário.