Formula di Excel: elimina i caratteri numerici dalla cella -

Sommario

Formula generica

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

Sommario

Per rimuovere caratteri numerici da una stringa di testo, puoi utilizzare una formula basata sulla funzione TEXTJOIN. Nell'esempio mostrato, la formula in C5 è:

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

Nota: questa è una formula di matrice e deve essere inserita con CTRL + MAIUSC + INVIO, tranne che in Excel 365.

Spiegazione

Excel non ha un modo per trasmettere le lettere in una stringa di testo a una matrice direttamente in una formula. Come soluzione alternativa, questa formula utilizza la funzione MID, con l'aiuto delle funzioni ROW e INDIRECT per ottenere lo stesso risultato. La formula in C5, copiata in basso, è:

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

Sembra piuttosto complicato, ma il succo è che creiamo un array di tutti i caratteri in B5 e testiamo ogni carattere per vedere se è un numero. In tal caso, scartiamo il valore e lo sostituiamo con una stringa vuota (""). In caso contrario, aggiungiamo il carattere non numerico a un array "elaborato". Infine, utilizziamo la funzione TEXTJOIN (nuova in Excel 2019) per concatenare tutti i caratteri insieme, ignorando i valori vuoti.

Lavorando dall'interno verso l'esterno, la funzione MID viene utilizzata per estrarre il testo in B5, un carattere alla volta. La chiave è lo snippet ROW e INDIRECT qui:

ROW(INDIRECT("1:100"))

che crea un array contenente 100 numeri come questo:

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

Nota: 100 rappresenta il numero massimo di caratteri da elaborare. Modificare in base ai propri dati o utilizzare la funzione LEN come spiegato di seguito.

Questo array va nella funzione MID come argomento start_num . Per num_chars , usiamo 1.

La funzione MID restituisce un array come questo:

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

Nota: elementi aggiuntivi nell'array rimossi per leggibilità.

A questo array, aggiungiamo zero. Questo è un semplice trucco che costringe Excel a forzare il testo in un numero. I valori di testo numerici come "1", "2", "3", "4" ecc. Vengono convertiti senza errori, ma i valori non numerici non avranno esito positivo e genereranno un errore #VALORE. Usiamo la funzione IF con la funzione ISERR per rilevare questi errori. Quando vediamo un errore, sappiamo di avere un carattere non numerico, quindi portiamo quel carattere nell'array elaborato con un'altra funzione MID:

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

Se non viene visualizzato un errore, sappiamo di avere un numero, quindi inseriamo una stringa vuota ("") nell'array al posto del numero.

Il risultato finale dell'array va nella funzione TEXTJOIN come argomento text1. Per delimitatore, usiamo una stringa vuota ("") e per ignore_empty forniamo TRUE. TEXTJOIN concatena quindi tutti i valori non vuoti nell'array e restituisce il risultato.

Lunghezza precisa dell'array

Invece di codificare un numero come 100 in INDIRETTO, puoi utilizzare la funzione LEN per creare un array con il numero effettivo di caratteri nella cella in questo modo:

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

LUNGHEZZA restituisce il conteggio dei caratteri nella cella come numero, che viene utilizzato al posto di 100. Ciò consente alla formula di scalare automaticamente fino a qualsiasi numero di caratteri.

Rimozione di spazio extra

Quando rimuovi i caratteri numerici, potresti avere caratteri di spazio extra rimanenti. Per rimuovere gli spazi iniziali e finali e normalizzare gli spazi tra le parole, puoi racchiudere la formula mostrata in questa pagina all'interno della funzione TRIM:

=TRIM(formula)

Con SEQUENCE

In Excel 365, la nuova funzione SEQUENZA può sostituire il codice RIGA + INDIRETTO sopra:

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

Qui, usiamo SEQUENCE + LEN per costruire un array della lunghezza corretta in un unico passaggio.

Con LET

Possiamo semplificare ulteriormente questa formula con la funzione LET. Poiché l'array viene creato due volte sopra con SEQUENCE e LEN, possiamo definire array come una variabile e crearlo solo una volta:

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

Qui il valore dell'array è impostato solo una volta, quindi utilizzato due volte all'interno della funzione MID.

Articoli interessanti...