
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.