Excel: estrarre un numero da una stringa di testo

  • Condividi Questo
Michael Brown

L'esercitazione mostra come estrarre numeri da varie stringhe di testo in Excel utilizzando formule e lo strumento Estrai.

Quando si tratta di estrarre una parte di una stringa di testo di una determinata lunghezza, Excel mette a disposizione tre funzioni di sottostringa (Sinistra, Destra e Metà) per gestire rapidamente il compito. Quando si tratta di estrarre numeri da una stringa alfanumerica, Microsoft Excel non fornisce... nulla.

Per ottenere un numero da una stringa in Excel sono necessari un po' di ingegno, un po' di pazienza e una serie di funzioni diverse annidate l'una nell'altra. In alternativa, è possibile eseguire lo strumento Estrai e fare il lavoro con un semplice clic del mouse. Di seguito troverete tutti i dettagli su entrambi i metodi.

    Come estrarre un numero dalla fine di una stringa di testo

    Quando si dispone di una colonna di stringhe alfanumeriche in cui il numero viene dopo il testo, è possibile utilizzare la seguente formula per ottenerlo.

    GIUSTO( cella , LEN( cella ) - MAX(IF(ISNUMBER(MID( cella , ROW(INDIRECT("1:"&LEN( cella )), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( cella ))), 0)))

    Ci soffermeremo sulla logica della formula un po' più avanti. Per ora, è sufficiente sostituire cella con un riferimento alla cella contenente la stringa originale (A2 nel nostro caso) e inserire la formula in una qualsiasi cella vuota della stessa riga, ad esempio in B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))))

    Questa formula ottiene i numeri solo dalla fine. Se una stringa ha numeri anche all'inizio o al centro, questi vengono ignorati:

    L'estrazione viene effettuata con la funzione DIRITTO che appartiene alla categoria delle funzioni di testo. L'output di questa funzione è sempre testo Nel nostro caso, il risultato è un sottostringa numerica , che in termini di Excel è anche un testo, non un numero.

    Se si vuole che il risultato sia un oggetto numero (che può essere utilizzato in ulteriori calcoli), quindi inserire la formula nella funzione VALORE o eseguire un'operazione aritmetica che non modifichi il risultato, ad esempio moltiplicare per 1 o aggiungere 0. Per individuare gli errori nelle stringhe che non contengono un singolo numero, utilizzare la funzione IFERROR. Ad esempio:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2)) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    o

    =IFERROR(RIGHT(A2, LEN(A2)) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")

    Nota: in Excel matrice dinamica (Office 365 e 2021), la formula viene inserita nel modo consueto con il tasto Invio. In Excel 2019 e precedenti, funziona solo come formula di matrice, quindi ricordatevi di premere Ctrl + Maiusc + Invio per completarla.

    Come funziona questa formula:

    Per estrarre un numero da una stringa alfanumerica, la prima cosa da sapere è da dove iniziare l'estrazione. La posizione dell'ultimo carattere non numerico in una stringa viene determinata con l'aiuto di questa difficile formula:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0))

    Per capire la logica, analizziamola dall'interno:

    La combinazione ROW(INDIRECT("1:"&LEN(A2)) crea una sequenza di numeri corrispondenti al totale dei caratteri della stringa di origine (A2), e questi numeri sequenziali vengono inviati a MID come numeri iniziali:

    MID(A2, {1;2;3;4;5;6;7;8}, 1)

    La funzione MID estrae ogni singolo carattere da A2 e lo restituisce come array:

    {"0";"5";"-";"E";"C";"-";"0";"1"}

    Poiché MID è una funzione di testo, il suo output è sempre un testo (come si può notare, tutti i caratteri sono racchiusi tra virgolette). Per trasformare i numeri in numeri, moltiplichiamo l'array per 1 (la doppia negazione --MID() avrà lo stesso effetto). Il risultato di questa operazione è un array di numeri e di errori #VALUE! che rappresentano caratteri non numerici:

    ISNUMBER({0;5;#VALORE!;#VALORE!;#VALORE!;#VALORE!;0;1})

    La funzione ISNUMBER valuta ogni elemento della matrice e fornisce il suo verdetto sotto forma di valori booleani: VERO per i numeri, FALSO per tutto il resto:

    {VERO; VERO; FALSO; FALSO; FALSO; FALSO; VERO; VERO; VERO}.

    Questa matrice passa al test logico della funzione IF, in cui ogni elemento della matrice viene confrontato con FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2)), 0)

    Per ogni FALSO (valore non numerico), un'altra funzione ROW(INDIRECT()) restituisce la sua posizione relativa nella stringa. Per ogni VERO (valore numerico), viene restituito uno zero. La matrice risultante ha il seguente aspetto:

    {0;0;3;4;5;6;0;0}

    Il resto è facile: la funzione MAX trova il numero più alto nell'array di cui sopra, che è la posizione dell'ultimo valore non numerico nella stringa (6 nel nostro caso). È sufficiente sottrarre questa posizione dalla lunghezza totale della stringa restituita da LEN e passare il risultato a RIGHT per farle sapere quanti caratteri estrarre dal lato destro della stringa:

    DESTRA(A2, LEN(A2) - 6)

    Fatto!

    Come estrarre un numero dall'inizio di una stringa di testo

    Se si lavora con record in cui il testo compare dopo il numero, è possibile estrarre il numero dall'inizio di una stringa utilizzando questa formula generica:

    SINISTRA( cella , MATCH(FALSE, ISNUMBER(MID( cella , ROW(INDIRECT("1:"&LEN( cella )+1)), 1) *1), 0) -1)

    Con la stringa originale in A2, utilizzare la seguente formula per ottenere il numero:

    =SINISTRA(A2, MATCH(FALSO, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    Indipendentemente dal numero di cifre presenti al centro o alla fine, viene estratto solo il numero iniziale:

    Nota: in Excel 365 e Excel 2021, a causa del supporto per gli array dinamici, una formula regolare va bene. In Excel 2019 e precedenti, è necessario premere Ctrl + Maiusc + Invio per renderla esplicitamente una formula formula dell'array .

    Come funziona questa formula:

    Anche in questo caso, utilizziamo la combinazione delle funzioni ROW, INDIRECT e LEN per creare una sequenza di numeri pari al totale dei caratteri della stringa di partenza più 1 (il ruolo di questo carattere aggiuntivo sarà chiaro più avanti).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID e ISNUMBER svolgono lo stesso lavoro dell'esempio precedente: MID estrae i singoli caratteri e ISNUMBER li converte in valori logici. L'array risultante di TRUE e FALSE viene inviato alla funzione MATCH come array di ricerca:

    MATCH(FALSE, {VERO;VERO;FALSO;FALSO;FALSO;FALSO;VERO;VERO;FALSO}, 0)

    MATCH calcola una posizione relativa del primo FALSO, dandoci la posizione del primo carattere non numerico nella stringa (3 in A2). Per estrarre i numeri precedenti, sottraiamo 1 dalla posizione del primo carattere di testo e serviamo la differenza al parametro num_caratteri della funzione LEFT:

    SINISTRA(A2, 3-1)

    Torniamo ora a un carattere "extra" nella sequenza generata da ROW(INDIRECT()+1)). Come già sapete, questa sequenza fornisce i punti di partenza per la funzione MID. Senza +1, MID estrarrebbe esattamente il numero di caratteri presenti nella stringa originale. Se la stringa contiene solo numeri, ISNUMBER restituirà solo VERO, mentre MATCH ha bisogno di almeno un FALSO. Per garantire ciò, aggiungiamo unun carattere in più alla lunghezza totale della stringa, che la funzione MID convertirà in una stringa vuota. Ad esempio, in B7, MID restituisce questo array:

    {"1"; "2"; "3"; "4";""}

    Nota: come nel caso della funzione DESTRA, anche SINISTRA restituisce un valore di sottostringa numerica Per ottenere il risultato come numero anziché come stringa numerica, annidare la formula nella funzione VALORE o moltiplicare il risultato per 1 come mostrato nel primo esempio.

    Come ottenere un numero da qualsiasi posizione in una stringa

    Se il vostro compito prevede l'estrazione di un numero da un punto qualsiasi di una stringa, potete utilizzare la seguente formula strabiliante pubblicata sul forum MrExcel:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2)), 1)) * ROW(INDIRECT("1:"&LEN(A2)), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    Dove A2 è la stringa di testo originale.

    La scomposizione di questa formula richiederebbe un articolo a parte, quindi potete semplicemente copiarla nel vostro foglio di lavoro per assicurarvi che funzioni davvero :)

    Esaminando i risultati, tuttavia, si può notare un inconveniente insignificante: se la stringa di origine non contiene un numero, la formula restituisce zero, come nella riga 6 della schermata precedente. Per risolvere questo problema, è possibile avvolgere la formula nell'istruzione IF, il cui test logico verifica se la stringa di origine contiene un numero. Se lo contiene, la formula estrae il numero, altrimenti restituisce un numero vuoto.stringa:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Come mostrato nella schermata seguente, la formula migliorata funziona a meraviglia (complimenti ad Alex, il nostro guru di Excel, per questo miglioramento):

    A differenza di tutti gli esempi precedenti, il risultato di questa formula è numero Per accertarsene, basta notare i valori allineati a destra nella colonna B e gli zeri iniziali troncati.

    Suggerimento: in Excel 365 - Excel 2019 esiste una soluzione molto più semplice con l'aiuto della funzione TEXTJOIN. Vedere Come rimuovere il testo e mantenere i numeri.

    Estrarre un numero da una stringa di testo con Ultimate Suite

    Come avete appena visto, non esiste una formula di Excel banale per estrarre un numero da una stringa di testo. Se avete difficoltà a comprendere le formule o a modificarle per i vostri set di dati, potreste apprezzare questo semplice metodo per ottenere un numero da una stringa in Excel.

    Con la nostra Ultimate Suite aggiunta alla barra multifunzione di Excel, è possibile recuperare rapidamente un numero da qualsiasi stringa alfanumerica:

    1. Vai al sito Dati Ablebits scheda> Testo e fare clic su Estratto :

    2. Selezionare tutte le celle con le stringhe di origine.
    3. Nel riquadro dello strumento Estrai, selezionare la voce Numeri estratti pulsante di opzione.
    4. A seconda che si desideri che i risultati siano formule o valori, selezionare l'opzione Inserire come formula o lasciarla deselezionata (impostazione predefinita).

      Si consiglia di selezionare questa casella se si desidera che i numeri estratti si aggiornino automaticamente non appena vengono apportate modifiche alle stringhe di origine. Se si desidera che i risultati siano indipendenti dalle stringhe originali (ad esempio nel caso in cui si intenda rimuovere i dati di origine in un secondo momento), non selezionare questa casella.

    5. Fare clic sul pulsante Inserire i risultati pulsante. Fatto!

    Come nell'esempio precedente, i risultati dell'estrazione sono numeri Ciò significa che si è liberi di contare, sommare, fare la media o eseguire qualsiasi altro calcolo con essi.

    In questo esempio, abbiamo scelto di inserire i risultati come valori e il componente aggiuntivo ha fatto esattamente ciò che era stato richiesto:

    Se il Inserire come formula è stata selezionata, si osserva una formula Curiosi di sapere quale sia, scaricate la versione di prova di Ultimate Suite e verificate voi stessi :)

    Download disponibili

    Numero estratto da Excel - cartella di lavoro di esempio (file .xlsx)

    Ultimate Suite - versione di prova (file .exe)

    Michael Brown è un appassionato di tecnologia dedicato con una passione per la semplificazione di processi complessi utilizzando strumenti software. Con oltre un decennio di esperienza nel settore tecnologico, ha affinato le sue competenze in Microsoft Excel e Outlook, nonché in Fogli Google e Documenti. Il blog di Michael è dedicato alla condivisione delle sue conoscenze e competenze con gli altri, fornendo suggerimenti e tutorial facili da seguire per migliorare la produttività e l'efficienza. Che tu sia un professionista esperto o un principiante, il blog di Michael offre spunti preziosi e consigli pratici per ottenere il massimo da questi strumenti software essenziali.