Fórmula do Excel: retire os caracteres numéricos da célula -

Índice

Fórmula genérica

(=TEXTJOIN("",TRUE,IF(ISERR(MID(A1,ROW(INDIRECT("1:100")),1)+0),MID(A1,ROW(INDIRECT("1:100")),1),"")))

Resumo

Para remover caracteres numéricos de uma string de texto, você pode usar uma fórmula baseada na função TEXTJOIN. No exemplo mostrado, a fórmula em C5 é:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,ROW(INDIRECT("1:100")),1)+0),MID(B5,ROW(INDIRECT("1:100")),1),""))

Observação: esta é uma fórmula de matriz e deve ser inserida com control + shift + enter, exceto no Excel 365.

Explicação

O Excel não tem uma maneira de converter as letras de uma string de texto em uma matriz diretamente em uma fórmula. Como solução alternativa, esta fórmula usa a função MID, com a ajuda das funções ROW e INDIRECT para obter o mesmo resultado. A fórmula em C5, copiada, é:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,ROW(INDIRECT("1:100")),1)+0),MID(B5,ROW(INDIRECT("1:100")),1),""))

Isso parece muito complicado, mas a essência é que criamos uma matriz de todos os caracteres em B5 e testamos cada caractere para ver se é um número. Nesse caso, descartamos o valor e o substituímos por uma string vazia (""). Caso contrário, adicionamos o caractere não numérico a uma matriz "processada". Por fim, usamos a função TEXTJOIN (nova no Excel 2019) para concatenar todos os caracteres, ignorando os valores vazios.

Trabalhando de dentro para fora, a função MID é usada para extrair o texto em B5, um caractere por vez. A chave é o fragmento ROW e INDIRETO aqui:

ROW(INDIRECT("1:100"))

que gira uma matriz contendo 100 números como este:

(1,2,3,4,5,6,7,8… .99.100)

Nota: 100 representa o máximo de caracteres a serem processados. Mude para se adequar aos seus dados ou use a função LEN conforme explicado abaixo.

Este array vai para a função MID como o argumento start_num . Para num_chars , usamos 1.

A função MID retorna uma matriz como esta:

("3";"4";"6";"5";"3";" ";"J";"i";"m";" ";"M";"c";"D";"o";"n";"a";"l";"d";"";"";"";… )

Nota: itens extras na matriz removidos para facilitar a leitura.

A este array, adicionamos zero. Este é um truque simples que força o Excel a forçar o texto a um número. Valores de texto numéricos como "1", "2", "3", "4" etc. são convertidos sem erros, mas os valores não numéricos falharão e gerarão um erro #VALUE. Usamos a função IF com a função ISERR para detectar esses erros. Quando vemos um erro, sabemos que temos um caractere não numérico, então trazemos esse caractere para a matriz processada com outra função MID:

MID(B5,ROW(INDIRECT("1:100")),1)

Se não obtiver um erro, sabemos que temos um número, então inserimos uma string vazia ("") no array no lugar do número.

O resultado final da matriz vai para a função TEXTJOIN como o argumento text1. Para delimitador, usamos uma string vazia ("") e para ignore_empty fornecemos TRUE. TEXTJOIN então concatena todos os valores não vazios na matriz e retorna o resultado.

Comprimento preciso da matriz

Em vez de codificar um número como 100 em INDIRETO, você pode usar a função LEN para construir uma matriz com o número real de caracteres na célula como este:

MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)

LEN retorna a contagem de caracteres na célula como um número, que é usado em vez de 100. Isso permite que a fórmula seja dimensionada para qualquer número de caracteres automaticamente.

Removendo espaço extra

Ao remover caracteres numéricos, você pode ter caracteres de espaço extras sobrando. Para eliminar os espaços iniciais e finais e normalizar os espaços entre as palavras, você pode envolver a fórmula mostrada nesta página dentro da função TRIM:

=TRIM(formula)

Com SEQUENCE

No Excel 365, a nova função SEQUENCE pode substituir o código ROW + INDIRETO acima:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,SEQUENCE(LEN(B5)),1)+0),MID(B5,SEQUENCE(LEN(B5)),1),""))

Aqui, usamos SEQUENCE + LEN para construir uma matriz do comprimento correto em uma etapa.

Com LET

Podemos simplificar ainda mais essa fórmula com a função LET. Como a matriz é criada duas vezes acima com SEQUENCE e LEN, podemos definir a matriz como uma variável e criá-la apenas uma vez:

=LET(array,SEQUENCE(LEN(B5)),TEXTJOIN("",TRUE,IF(ISERR(MID(B5,array,1)+0),MID(B5,array,1),"")))

Aqui, o valor do array é definido apenas uma vez e, em seguida, usado duas vezes dentro da função MID.

Artigos interessantes...