Excel: trovare e sostituire più valori contemporaneamente

  • Condividi Questo
Michael Brown

In questa esercitazione esamineremo diversi modi per trovare e sostituire più parole, stringhe o singoli caratteri, in modo da poter scegliere quello più adatto alle vostre esigenze.

Di solito le ricerche in Excel si effettuano utilizzando la funzione Trova e sostituisci, che funziona bene per i valori singoli. Ma cosa succede se si devono sostituire decine o addirittura centinaia di elementi? Sicuramente nessuno vorrebbe effettuare manualmente tutte le sostituzioni una per una, per poi rifarle quando i dati cambiano. Fortunatamente, esistono alcuni metodi più efficaci per effettuare sostituzioni di massa in Excel, eanalizzeremo ciascuno di essi in dettaglio.

    Trova e sostituisce valori multipli con SUBSTITUTE nidificato

    Il modo più semplice per trovare e sostituire più voci in Excel è utilizzare la funzione SOSTITUISCI.

    La logica della formula è molto semplice: si scrivono alcune funzioni individuali per sostituire un vecchio valore con uno nuovo e poi si annidano queste funzioni una dentro l'altra, in modo che ogni SUBSTITUTE successivo usi l'output del SUBSTITUTE precedente per cercare il valore successivo.

    SOSTITUTO(SOSTITUTO(SOSTITUTO( testo , vecchio_testo1 , nuovo_testo1 ), vecchio_testo2 , nuovo_testo2 ), vecchio_testo3 , nuovo_testo3 )

    Nell'elenco di località in A2:A10, supponiamo di voler sostituire i nomi abbreviati dei paesi (come ad esempio FR , REGNO UNITO e STATI UNITI D'AMERICA ) con i nomi completi.

    Per farlo, inserire i vecchi valori in D2:D4 e i nuovi valori in E2:E4 come mostrato nella schermata sottostante. Quindi, inserire la formula seguente in B2 e premere Invio:

    =SOSTITUTO(SOSTITUTO(SOSTITUTO(A2:A10, D2, E2), D3, E3), D4, E4)

    ...e avrete tutte le sostituzioni in una volta sola:

    Si noti che l'approccio sopra descritto funziona solo in Excel 365 che supporta gli array dinamici.

    Nelle versioni pre-dinamiche di Excel 2019, Excel 2016 e precedenti, la formula deve essere scritta per la cella più in alto (B2) e poi copiata nelle celle sottostanti:

    =SOSTITUTO(SOSTITUTO(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)

    Si noti che in questo caso i valori sostitutivi vengono bloccati con riferimenti assoluti alla cella, in modo che non si spostino quando si copia la formula.

    Nota: la funzione SUBSTITUTE è sensibile alle maiuscole e alle minuscole , il che significa che si devono digitare i vecchi valori ( vecchio_testo ) con le stesse lettere che compaiono nei dati originali.

    Per quanto semplice, questo metodo presenta un inconveniente significativo: quando si hanno decine di elementi da sostituire, le funzioni annidate diventano piuttosto difficili da gestire.

    Vantaggi Facile da implementare; supportato in tutte le versioni di Excel.

    Svantaggi : da utilizzare per un numero limitato di valori di ricerca/sostituzione.

    Ricerca e sostituzione di più voci con XLOOKUP

    Nel caso in cui si voglia sostituire il l'intero contenuto della cella , non la sua parte, la funzione XLOOKUP è utile.

    Supponiamo di avere un elenco di paesi nella colonna A e di voler sostituire tutte le abbreviazioni con i nomi completi corrispondenti. Come nell'esempio precedente, si inizia con l'immissione delle voci "Trova" e "Sostituisci" in colonne separate (rispettivamente D ed E), quindi si inserisce questa formula in B2:

    =XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)

    Tradotta dal linguaggio di Excel a quello umano, ecco cosa fa la formula:

    Cerca il valore A2 (lookup_value) in D2:D4 (lookup_array) e restituisce una corrispondenza da E2:E4 (return_array). Se non viene trovato, estrae il valore originale da A2.

    Fate doppio clic sulla maniglia di riempimento per copiare la formula nelle celle sottostanti e il risultato non vi farà attendere:

    Poiché la funzione XLOOKUP è disponibile solo in Excel 365, la formula di cui sopra non funziona nelle versioni precedenti. Tuttavia, è possibile imitare facilmente questo comportamento con una combinazione di IFERROR o IFNA e VLOOKUP:

    =IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)

    Nota: a differenza di SUBSTITUTE, le funzioni XLOOKUP e VLOOKUP sono non sensibile alle maiuscole , cioè cercano i valori di ricerca ignorando le lettere maiuscole e minuscole. Ad esempio, la nostra formula sostituisce entrambi i valori FR e fr con Francia .

    Vantaggi Uso insolito delle funzioni abituali; funziona in tutte le versioni di Excel.

    Svantaggi : funziona a livello di cella, non può sostituire parte del contenuto della cella.

    Sostituzione multipla con la funzione ricorsiva LAMBDA

    Per gli abbonati a Microsoft 365, Excel mette a disposizione una funzione speciale che consente di creare funzioni personalizzate utilizzando un linguaggio di formule tradizionale. Sì, sto parlando di LAMBDA. Il bello di questo metodo è che può convertire una formula molto lunga e complessa in una molto compatta e semplice. Inoltre, consente di creare funzioni personalizzate che non esistono in Excel, cosa che prima non esisteva.possibile solo con VBA.

    Per informazioni dettagliate sulla creazione e l'utilizzo di funzioni LAMBDA personalizzate, consultate questo tutorial: Come scrivere funzioni LAMBDA in Excel. Qui discuteremo un paio di esempi pratici.

    Vantaggi Il risultato è una funzione elegante e incredibilmente semplice da usare, indipendentemente dal numero di coppie di sostituzione.

    Svantaggi : disponibile solo in Excel 365; è specifico per la cartella di lavoro e non può essere riutilizzato in diverse cartelle di lavoro.

    Esempio 1. Ricerca e sostituzione di più parole / stringhe contemporaneamente

    Per sostituire più parole o testo in una sola volta, abbiamo creato una funzione LAMBDA personalizzata, denominata MultiSostituzione che può assumere una delle seguenti forme:

    =LAMBDA(testo, vecchio, nuovo, IF(vecchio"", MultiReplace(SUBSTITUTE(testo, vecchio, nuovo), OFFSET(vecchio, 1, 0), OFFSET(nuovo, 1, 0)), testo))

    Oppure

    =LAMBDA(testo, vecchio, nuovo, IF(vecchio="", testo, MultiReplace(SUBSTITUTE(testo, vecchio, nuovo), OFFSET(vecchio, 1, 0), OFFSET(nuovo, 1, 0))))

    Entrambe sono funzioni ricorsive che chiamano se stesse. La differenza sta solo nel modo in cui viene stabilito il punto di uscita.

    Nella prima formula, la funzione IF controlla se il valore vecchio non è vuoto (vecchio""). Se è VERO, l'elenco MultiSostituzione Se FALSO, la funzione restituisce testo nella sua forma attuale ed esce.

    La seconda formula utilizza la logica inversa: se vecchio è vuoto (old=""), allora restituisce testo e uscire; altrimenti chiamare MultiSostituzione .

    La parte più complicata è stata completata: ciò che resta da fare è dare un nome al file MultiSostituzione nella Gestione nomi, come mostrato nella schermata seguente. Per le linee guida dettagliate, vedere Come assegnare un nome a una funzione LAMBDA.

    Una volta che la funzione ha un nome, è possibile utilizzarla come qualsiasi altra funzione incorporata.

    Qualunque delle due varianti di formula si scelga, dal punto di vista dell'utente finale la sintassi è semplice:

    MultiReplace(testo, vecchio, nuovo)

    Dove:

    • Testo - i dati di origine
    • Vecchio - i valori da trovare
    • Nuovo - i valori da sostituire con

    Riprendendo l'esempio precedente, sostituiamo non solo le abbreviazioni dei paesi, ma anche quelle degli stati. A questo scopo, digitate le abbreviazioni ( vecchio ) nella colonna D a partire da D2 e i nomi completi ( nuovo nella colonna E a partire da E2.

    In B2, inserire la funzione MultiReplace:

    =MultiSostituzione(A2:A10, D2, E2)

    Premete Invio e godetevi i risultati :)

    Come funziona questa formula

    L'indizio per capire la formula è la comprensione della ricorsione. Può sembrare complicato, ma il principio è piuttosto semplice: a ogni iterazione, una funzione ricorsiva risolve una piccola istanza di un problema più grande. Nel nostro caso, la funzione MultiSostituzione esegue un ciclo dei valori vecchi e nuovi e, a ogni ciclo, esegue una sostituzione:

    MultiSostituzione (SUBSTITUTE(testo, vecchio, nuovo), OFFSET(vecchio, 1, 0), OFFSET(nuovo, 1, 0))

    Come per le funzioni SUBSTITUTE annidate, il risultato della SUBSTITUTE precedente diventa la funzione testo per il successivo SUBSTITUTE. In altre parole, ad ogni successiva chiamata di MultiSostituzione La funzione SUBSTITUTE non elabora la stringa di testo originale, ma l'output della chiamata precedente.

    Per gestire tutti gli elementi della cartella vecchio si parte dalla cella più in alto e si usa la funzione OFFSET per spostarsi di una riga verso il basso a ogni interazione:

    OFFSET(vecchio, 1, 0)

    Lo stesso viene fatto per il nuovo lista:

    OFFSET(nuovo, 1, 0)

    La cosa fondamentale è fornire un punto di uscita per evitare che le chiamate ricorsive procedano all'infinito. Ciò avviene con l'aiuto della funzione IF: se il parametro vecchio è vuota, la funzione restituisce testo la sua forma attuale e le sue uscite:

    =LAMBDA(testo, vecchio, nuovo, IF(vecchio="", testo, MultiReplace(...)))

    o

    =LAMBDA(testo, vecchio, nuovo, IF(vecchio"", MultiReplace(...), testo))

    Esempio 2. Sostituire più caratteri in Excel

    In linea di principio, il MultiSostituzione discussa nell'esempio precedente, può gestire anche i singoli caratteri, a condizione che ogni carattere vecchio e nuovo sia inserito in una cella separata, esattamente come i nomi abbreviati e completi nelle schermate precedenti.

    Se si preferisce inserire i vecchi caratteri in una cella e i nuovi caratteri in un'altra cella, o digitarli direttamente nella formula, è possibile creare un'altra funzione personalizzata, denominata SostituisciCaratteri utilizzando una delle seguenti formule:

    =LAMBDA(testo, vecchi_caratteri, nuovi_caratteri, IF(vecchi_caratteri"", ReplaceChars(SUBSTITUTE(testo, LEFT(vecchi_caratteri), LEFT(nuovi_caratteri)), RIGHT(vecchi_caratteri, LEN(vecchi_caratteri)-1), RIGHT(nuovi_caratteri, LEN(nuovi_caratteri)-1)), testo))

    Oppure

    =LAMBDA(testo, vecchie_caratteristiche, nuove_caratteristiche, IF(vecchie_caratteristiche="", testo, ReplaceChars(SUBSTITUTE(testo, LEFT(vecchie_caratteristiche), LEFT(nuove_caratteristiche)), RIGHT(vecchie_caratteristiche, LEN(vecchie_caratteristiche)-1), RIGHT(nuove_caratteristiche, LEN(nuove_caratteristiche)-1))))

    Ricordarsi di dare un nome alla nuova funzione Lambda nel Gestore dei nomi, come di consueto:

    La nuova funzione personalizzata è pronta per essere utilizzata:

    ReplaceChars(testo, old_chars, new_chars)

    Dove:

    • Testo - le stringhe originali
    • Vecchio - i caratteri da cercare
    • Nuovo - i caratteri da sostituire con

    Per fare una prova sul campo, facciamo un'operazione che viene eseguita spesso sui dati importati: sostituiamo le virgolette e gli apostrofi intelligenti con virgolette e apostrofi diritti.

    Per prima cosa, inseriamo le virgolette intelligenti e l'apostrofo intelligente in D2, le virgolette diritte e l'apostrofo diritto in E2, separando i caratteri con degli spazi per una migliore leggibilità (poiché utilizziamo lo stesso delimitatore in entrambe le celle, non avrà alcun impatto sul risultato: Excel sostituirà semplicemente uno spazio con uno spazio).

    Dopodiché, inseriamo questa formula in B2:

    =SostituisciCaratteri(A2:A4, D2, E2)

    E ottenere esattamente i risultati che stavamo cercando:

    È anche possibile digitare i caratteri direttamente nella formula. Nel nostro caso, basta ricordarsi di "duplicare" le virgolette in questo modo:

    =SostituisciCaratteri(A2:A4, "" " '", "" "" '")

    Come funziona questa formula

    Il SostituisciCaratteri La funzione scorre ciclicamente gli elementi di vecchie_caratteristiche e nuovi_caratteri ed effettua una sostituzione alla volta partendo dal primo carattere a sinistra. Questa parte viene eseguita dalla funzione SUBSTITUTE:

    SUBSTITUTE(testo, SINISTRA(caratteri_vecchi), SINISTRA(caratteri_nuovi))

    Ad ogni iterazione, la funzione DIRITTO toglie un carattere dalla sinistra di entrambi i caratteri vecchie_caratteristiche e nuovi_caratteri in modo che LEFT possa recuperare la coppia di caratteri successiva per la sostituzione:

    ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))

    Prima di ogni chiamata ricorsiva, la funzione IF valuta il parametro vecchie_caratteristiche Se non è vuota, la funzione richiama se stessa. Non appena l'ultimo carattere è stato sostituito, il processo di iterazione termina, la formula restituisce testo la sua forma attuale e le sue uscite.

    Nota: poiché la funzione SUBSTITUTE utilizzata nelle nostre formule principali è sensibile alle maiuscole e alle minuscole , entrambi i Lambda ( MultiSostituzione e SostituisciCaratteri ) trattano le lettere maiuscole e minuscole come caratteri diversi.

    Ricerca e sostituzione di massa con UDF

    Se la funzione LAMBDA non è disponibile in Excel, potete scrivere una funzione definita dall'utente per la sostituzione multipla in modo tradizionale utilizzando VBA.

    Per distinguere l'UDF dalla definizione di LAMBDA MultiSostituzione la chiameremo in modo diverso, ad esempio Sostituzione di massa Il codice della funzione è il seguente:

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'array per memorizzare i risultati Dim arSearchReplace(), sTmp As String 'array dove memorizzare le coppie di ricerca/sostituzione, stringa temporanea Dim iFindCurRow, cntFindRows As Long 'indice della riga corrente dell'array SearchReplace, conteggio delle righe Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'indice della riga corrente nell'intervallo di origine, indice della colonna corrente nell'intervallo di origine, conteggio delle righe, conteggio delle colonne cntInputRows = InputRng.Rows.Count cntInputCols = InputRng.Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'preparazione dell'array di coppie di ricerca/sostituzione PeriFindCurRow = 1 a cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Ricerca e sostituzione nell'intervallo di origine For iInputCurRow = 1 a cntInputRows For iInputCurCol = 1 a cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Sostituzione di tutte le coppie di ricerca/sostituzione in ogni cellaPer iFindCurRow = 1 A cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next MassReplace = arRes End Function

    Come le funzioni definite da LAMBDA, le UDF sono a livello di cartella di lavoro Ciò significa che il Sostituzione di massa La funzione funziona solo nella cartella di lavoro in cui è stato inserito il codice. Se non siete sicuri di come farlo correttamente, seguite la procedura descritta in Come inserire codice VBA in Excel.

    Una volta aggiunto il codice alla cartella di lavoro, la funzione apparirà nell'intellisense della formula - solo il nome della funzione, non gli argomenti! Tuttavia, credo che non sia un problema ricordare la sintassi:

    MassReplace(input_range, find_range, replace_range)

    Dove:

    • Campo_ingresso - l'intervallo di origine in cui si desidera sostituire i valori.
    • Trova_gamma - i caratteri, le stringhe o le parole da cercare.
    • Sostituire_gamma - i caratteri, le stringhe o le parole da sostituire.

    In Excel 365, grazie al supporto degli array dinamici, questa formula funziona come una normale formula, che deve essere inserita solo nella cella superiore (B2):

    =MassReplace(A2:A10, D2:D4, E2:E4)

    In Excel pre-dinamico, questo funziona come una formula di matrice CSE vecchio stile: si seleziona l'intero intervallo di origine (B2:B10), si digita la formula e si premono contemporaneamente i tasti Ctrl + Maiusc + Invio per completarla.

    Vantaggi : un'alternativa decente a una funzione LAMBDA personalizzata in Excel 2019, Excel 2016 e versioni precedenti

    Svantaggi : la cartella di lavoro deve essere salvata come file .xlsm abilitato alle macro.

    Sostituzione massiva in Excel con macro VBA

    Se amate automatizzare le attività più comuni con le macro, potete utilizzare il seguente codice VBA per trovare e sostituire più valori in un intervallo.

    Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Source data:" , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox( "Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing ThenApplication.ScreenUpdating = False For Each Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End Sub

    Per utilizzare subito la macro, è possibile scaricare la nostra cartella di lavoro di esempio contenente il codice, oppure inserire il codice nella propria cartella di lavoro.

    Come utilizzare la macro

    Prima di eseguire la macro, digitare i valori vecchi e nuovi in due colonne adiacenti, come mostrato nell'immagine seguente (C2:D4).

    Quindi, selezionare i dati di origine, premere Alt + F8 , scegliere il pulsante Sostituzione massiva e fare clic su Correre .

    Come il fonte rabbia è preselezionato, basta verificare il riferimento e fare clic su OK:

    Successivamente, selezionare la voce sostituire la gamma e fare clic su OK:

    Fatto!

    Vantaggi : configurazione una volta, riutilizzo in qualsiasi momento

    Svantaggi La macro deve essere eseguita ad ogni modifica dei dati.

    Trova e sostituisci multipli in Excel con lo strumento Sostanza

    Nel primo esempio ho detto che il SUBSTITUTE annidato è il modo più semplice per sostituire più valori in Excel. Ammetto che mi sbagliavo. La nostra Ultimate Suite rende le cose ancora più semplici!

    Per eseguire la sostituzione di massa nel foglio di lavoro, andare alla voce Dati Ablebits e fare clic su Strumenti per le sottostringhe > Sostituire le sottostringhe .

    Il Sostituire le sottostringhe Viene visualizzata una finestra di dialogo che chiede di definire il Fonte gamma e Sottostringhe gamma.

    Con i due intervalli selezionati, fare clic sul pulsante Sostituire e trovare i risultati in una nuova colonna inserita a destra dei dati originali. Sì, è così facile!

    Suggerimento: prima di fare clic su Sostituire c'è una cosa importante da tenere in considerazione: la Sensibile alle maiuscole e alle minuscole Assicuratevi di selezionarla se desiderate gestire le lettere maiuscole e minuscole come caratteri diversi. In questo esempio, selezioniamo questa opzione perché vogliamo sostituire solo le stringhe in maiuscolo e lasciare intatte le sottostringhe come "fr", "uk" o "ak" all'interno di altre parole.

    Se siete curiosi di sapere quali altre operazioni di massa possono essere eseguite sulle stringhe, date un'occhiata agli altri strumenti per le sottostringhe inclusi nella nostra Ultimate Suite. O ancora meglio, scaricate la versione di valutazione qui sotto e provatela!

    Ecco come trovare e sostituire più parole e caratteri contemporaneamente in Excel. Vi ringrazio per la lettura e spero di vedervi sul nostro blog la prossima settimana!

    Download disponibili

    Trova e sostituisci multipli in Excel (file .xlsm)

    Ultimate Suite 14 giorni versione completamente funzionale (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.