Sommario
Questa esercitazione vi insegnerà come separare il testo dai numeri in Excel utilizzando formule native e funzioni personalizzate. Imparerete anche a dividere testo e numeri in due colonne separate.
Immaginate di ricevere i dati grezzi per l'analisi e di scoprire che i numeri sono mescolati al testo in un'unica colonna. Nella maggior parte delle situazioni, sarà sicuramente più comodo averli in colonne separate per un esame più approfondito.
Se si lavora con dati omogenei, si possono usare le funzioni SINISTRA, DESTRA e MEDIO per estrarre lo stesso numero di caratteri dalla stessa posizione. Ma questo è uno scenario ideale per i test di laboratorio. Nella vita reale, è più probabile che si abbia a che fare con dati dissimili in cui i numeri vengono prima del testo, dopo il testo o tra il testo. Gli esempi seguenti forniscono soluzioni proprio per questocaso.
Come rimuovere il testo e mantenere i numeri nelle celle di Excel
La soluzione funziona in Excel 365, Excel 2021 e Excel 2019.
Microsoft Excel 2019 ha introdotto alcune nuove funzioni che non sono disponibili nelle versioni precedenti e noi utilizzeremo una di queste funzioni, ovvero TEXTJOIN, per eliminare i caratteri di testo da una cella contenente numeri.
La formula generica è:
TEXTJOIN("", TRUE, IFERROR(MID( cella , ROW(INDIRECT("1:"&LEN( cella ))), 1) *1, ""))In Excel 365 e 2021 funziona anche questo:
TEXTJOIN("", TRUE, IFERROR(MID( cella , SEQUENZA(LEN( cella )), 1) *1, ""))A prima vista, le formule possono sembrare un po' intimidatorie, ma funzionano :)
Ad esempio, per rimuovere il testo dai numeri in A2, inserite una delle formule seguenti in B2 e poi copiatela in tutte le celle necessarie.
In Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2)), 1) *1, ""))
In Excel 2019, deve essere inserita come formula di matrice con Ctrl + Maiusc + Invio. In Excel matrice dinamica, funziona come una normale formula completata con il tasto Invio.
In Excel 365 e 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Di conseguenza, tutti i caratteri di testo vengono rimossi da una cella e i numeri vengono mantenuti:
Come funziona questa formula:
Per capire meglio la logica, iniziamo a studiare la formula dall'interno:
Si utilizza ROW(INDIRECT("1:"&LEN(stringa)) o SEQUENCE(LEN(stringa)) per creare una sequenza di numeri corrispondenti al numero totale di caratteri della stringa di origine, quindi si inseriscono questi numeri sequenziali nella funzione MID come numeri iniziali. In B2, questa parte della formula si presenta come segue:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
La funzione MID estrae ogni carattere da A2 a partire dal primo e lo restituisce come array:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Questa matrice viene moltiplicata per 1. I valori numerici rimangono invariati, mentre la moltiplicazione di un carattere non numerico provoca un errore #VALORE!
{2;1;0;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!}
La funzione IFERROR gestisce questi errori e li sostituisce con stringhe vuote:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Questo array finale viene servito alla funzione TEXTJOIN, che concatena i valori non vuoti dell'array ( ignora_vuoto impostato su TRUE) utilizzando una stringa vuota ("") come delimitatore:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Suggerimento: anche per Excel 2016-2007 esiste una soluzione, ma la formula è molto più complessa. La potete trovare in questo tutorial: Come estrarre numeri in Excel.
Funzione personalizzata per rimuovere il testo dai numeri
La soluzione funziona per tutte le versioni di Excel
Se utilizzate una vecchia versione di Excel o trovate le formule di cui sopra troppo difficili da ricordare, nulla vi impedisce di creare una vostra funzione con una sintassi più semplice e un nome facile da usare, come ad esempio Rimuovi testo La funzione definita dall'utente (UDF) può essere scritta in due modi:
Codice VBA 1:
Qui si esamina uno per uno ogni carattere della stringa di partenza e si controlla se è numerico o meno. Se è un numero, il carattere viene aggiunto alla stringa risultante.
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionCodice VBA 2:
Il codice crea un oggetto per elaborare un'espressione regolare. Utilizzando RegExp, si rimuovono tutti i caratteri diversi dalle cifre 0-9 dalla stringa di origine.
Funzione RemoveText(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionSu fogli di lavoro di piccole dimensioni, entrambi i codici funzionano ugualmente bene, mentre su fogli di lavoro di grandi dimensioni in cui la funzione viene richiamata centinaia o migliaia di volte, il codice 2 che utilizza VBScript.RegExp funzionerà più velocemente.
I passaggi dettagliati per inserire il codice nella cartella di lavoro sono disponibili qui: Come inserire il codice VBA in Excel.
Qualunque sia l'approccio scelto, dal punto di vista dell'utente finale, la funzione per eliminare il testo e lasciare i numeri è molto semplice:
RemoveText(stringa)Ad esempio, per rimuovere i caratteri non numerici dalla cella A2, la formula in B2 è:
=Rimuovi testo(A2)
Basta copiarlo lungo la colonna per ottenere questo risultato:
Nota: sia le formule native che la funzione personalizzata producono un valore di stringa numerica Per trasformarla in un numero, moltiplicare il risultato per 1, aggiungere zero o racchiudere la formula nella funzione VALORE. Ad esempio:
=Rimuovi testo(A2) + 0
=VALORE(Rimuovi testo(A2))
Come rimuovere i numeri da una stringa di testo in Excel
La soluzione funziona in Excel 365, Excel 2021 e Excel 2019.
Le formule per rimuovere i numeri da una stringa alfanumerica sono praticamente simili a quelle discusse nell'esempio precedente.
Per Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( cella , ROW(INDIRECT("1:"&LEN( cella )), 1) *1), MID( cella , ROW(INDIRECT("1:"&LEN( cella ))), 1), ""))In Excel 2019, ricordatevi di renderlo un formula dell'array premendo insieme i tasti Ctrl + Maiusc + Invio.
Per Excel 365 e 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( cella , SEQUENZA(LEN( cella 1) *1), MID( cella , SEQUENZA(LEN( cella )), 1), ""))Ad esempio, per eliminare i numeri da una stringa in A2, la formula è:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Oppure
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Di conseguenza, tutti i numeri vengono rimossi da una cella e vengono mantenuti i caratteri di testo:
Come mostrato nella schermata precedente, la formula elimina i caratteri numerici da qualsiasi posizione in una stringa: all'inizio, alla fine e nel mezzo. Tuttavia, c'è un'avvertenza: se una stringa inizia con un numero seguito da uno spazio , quello spazio viene mantenuto, il che produce un problema di spazi iniziali (come in B2).
Per sbarazzarsi di un'ulteriore spazi prima del testo , avvolgere la formula nella funzione TRIM in questo modo:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))
I risultati sono assolutamente perfetti!
Come funziona questa formula:
In sostanza, la formula funziona come quella spiegata nell'esempio precedente. La differenza è che, dalla matrice finale servita alla funzione TEXTJOIN, è necessario rimuovere i numeri, non il testo. Per farlo, si utilizza la combinazione delle funzioni IF e ISERROR.
Come ricorderete, MID(...)+0 genera un array di numeri e di errori #VALUE! che rappresentano caratteri di testo nelle stesse posizioni:
{2;1;0;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!;#VALORE!}
La funzione ISERROR cattura gli errori e passa l'array di valori booleani risultante a IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}.
Quando la funzione IF vede VERO (un errore), inserisce il carattere di testo corrispondente nell'array elaborato con l'aiuto di un'altra funzione MID. Quando la funzione IF vede FALSO (un numero), lo sostituisce con una stringa vuota:
{"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d" }.
Questo array finale viene passato a TEXTJOIN, che concatena i caratteri di testo e produce il risultato.
Funzione personalizzata per rimuovere i numeri dal testo
La soluzione funziona per tutte le versioni di Excel
Tenendo presente che una formula robusta deve essere mantenuta semplice, condividerò il codice della funzione definita dall'utente (UDF) per eliminare qualsiasi carattere numerico.
Codice VBA 1:
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionCodice VBA 2:
Funzione RemoveNumbers(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionCome nel caso della funzione RemoveText, il secondo codice è meglio utilizzarlo in fogli di lavoro di grandi dimensioni per ottimizzare le prestazioni.
Una volta aggiunto il codice alla cartella di lavoro, è possibile rimuovere tutti i caratteri numerici da una cella utilizzando questa funzione personalizzata:
RimuoviNumeri(stringa)Nel nostro caso, la formula in B2 è:
=RimuoviNumeri(A2)
Per tagliare gli eventuali spazi iniziali, annidare la funzione personalizzata all'interno di TRIM come si farebbe con una formula nativa:
=TRIM(RimuoviNumeri(A2))
Dividere numeri e testo in colonne separate
Quando si vuole separare testo e numeri in due colonne, sarebbe bello poterlo fare con una sola formula, no? Per questo, basta unire il codice della formula Rimuovi testo e RimuoviNumeri in un'unica funzione, denominata Numeri divisi per testo , o semplicemente Dividere , o quello che preferite :)
Codice VBA 1:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If EndFunzioneCodice VBA 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End FunctionLa nostra nuova funzione personalizzata richiede due argomenti:
SplitTextNumbers(stringa, is_remove_text)Dove is_remove_text è un valore booleano che indica quali caratteri eliminare:
- VERO o 1 - rimuove il testo e mantiene i numeri
- FALSO o 0 - rimuove i numeri e mantiene il testo
Per il nostro set di dati campione, le formule assumono questa forma:
Per rimuovere i caratteri non numerici:
=SplitTextNumbers(A2, TRUE)
Per eliminare i caratteri numerici:
=SplitTextNumbers(A2, FALSE)
Suggerimento: per evitare un potenziale problema di spazi iniziali, si consiglia di avvolgere sempre la formula che rimuove i numeri nella funzione TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Strumento speciale per rimuovere numeri o testo
Per coloro che non amano complicare inutilmente le cose, mostrerò il nostro metodo per rimuovere testo o numeri in Excel.
Supponendo che la nostra Ultimate Suite sia stata aggiunta alla barra multifunzione di Excel, ecco cosa fare:
- Sul Dati Ablebits nella scheda Testo gruppo, fare clic su Rimuovere > Rimuovere i personaggi .
Suggerimento: se i risultati contengono spazi iniziali, lo strumento Ritaglia spazi li eliminerà in un attimo.
Ecco come rimuovere caratteri di testo o numerici da una stringa in Excel. Vi ringrazio per la lettura e vi aspetto sul nostro blog la prossima settimana!
Download disponibili
Rimuovere testo o numeri in Excel - esempi (file .xlsm)
Ultimate Suite - versione di prova (file .exe)