Excel: estrarre il nome dopo la virgola (formato “cognome, nome”) con formula e macro VBA

Devi estrarre solo il nome da celle in formato “cognome, nome”? In questa guida pratica trovi la formula più rapida per Excel 365/2021, le alternative compatibili con versioni precedenti, e una macro VBA completa per riempire automaticamente una seconda colonna con il risultato.

Indice

Perché estrarre il nome dal formato “cognome, nome”

Il formato “cognome, nome” è diffusissimo in esportazioni da CRM, ERP e strumenti HR. Tuttavia, per ordinare, unire elenchi, generare badge, lettere personalizzate o semplicemente uniformare l’anagrafica, spesso serve ottenere solo il nome, cioè tutto ciò che segue la sequenza , (virgola e spazio). Le soluzioni qui sotto sono pensate per essere:

  • Immediate (una formula e via);
  • Compatibili con più versioni di Excel (anche senza funzioni moderne);
  • Scalabili (macro ottimizzata per migliaia di righe);
  • Robuste contro dati sporchi (spazi doppi, record senza virgola, titoli, suffissi).

Soluzione lampo con formula nativa (Excel 365/2021/2024)

Se la tua versione include TEXTAFTER, la via più semplice è distinguere esattamente ciò che viene dopo “, ”.

Formula base

Supponendo il testo in A2 nel formato Rossi, Mario:

=TEXTAFTER(A2; ", ")

Questa formula restituisce tutto il contenuto successivo alla sequenza , . Copia verso il basso per applicarla alle altre righe.

Gestire spazi irregolari e celle senza virgola

Nei file reali può capitare che ci siano virgole senza lo spazio oppure spazi multipli. In tal caso è utile ripulire il risultato e proteggere la formula da errori:

=SE.ERRORE(ANNULLA.SPAZI(TEXTAFTER(A2; ",")); "")

Cosa fa: estrae tutto dopo la virgola (indipendentemente dagli spazi), rimuove spazi superflui e restituisce stringa vuota se la virgola non c’è.

Applicare la formula a un’intera colonna (array dinamici)

Con Excel 365 puoi processare un intervallo in un colpo solo usando formule spiller (che si “espandono” automaticamente):

=ANNULLA.SPAZI(TEXTAFTER(A2:A1000; ","))

Inseriscila in B2: la formula “si riverserà” verso il basso fin dove trova dati in A2:A1000. In presenza di record senza virgola, aggiungi SE.ERRORE:

=SE.ERRORE(ANNULLA.SPAZI(TEXTAFTER(A2:A1000; ",")); "")

Versione in inglese (per file o colleghi con Excel in EN)

=IFERROR(TRIM(TEXTAFTER(A2, ",")), "")

Compatibilità totale: formula classica senza TEXTAFTER

Se usi versioni precedenti (es. Excel 2010/2013/2016/2019) dove TEXTAFTER non è disponibile, usa STRINGA.ESTRAI + TROVA + LUNGHEZZA.

Formula base (italiano)

Valore in A2, formato Rossi, Mario con virgola e uno spazio:

=STRINGA.ESTRAI(A2; TROVA(", "; A2)+2; LUNGHEZZA(A2) - TROVA(", "; A2) - 1)

Qui cerchiamo la sequenza , , iniziamo a estrarre dal carattere subito dopo lo spazio (+2) e calcoliamo la lunghezza rimanente. Copia in basso per le altre righe.

Variante tollerante (spazi mancanti o multipli)

Se alcuni record hanno solo la virgola (senza spazio) o più spazi, cerca la virgola e poi ripulisci:

=ANNULLA.SPAZI(STRINGA.ESTRAI(A2; TROVA(","; A2)+1; LUNGHEZZA(A2)))

Proteggere la formula da errori

Per evitare #VALORE! quando la virgola manca:

=SE.ERRORE(ANNULLA.SPAZI(STRINGA.ESTRAI(A2; TROVA(","; A2)+1; LUNGHEZZA(A2))); "")

Equivalente in inglese

=IFERROR(TRIM(MID(A2, FIND(",", A2)+1, LEN(A2))), "")

Record con ulteriori informazioni (titoli, suffissi)

Se esistono eccezioni tipo “Rossi, Mario Luigi” o “Rossi, Mario, PhD”, le formule sopra continuano a funzionare: estraggono tutto ciò che segue la prima virgola. Se invece vuoi fermarti al primo spazio del nome (per ottenere solo “Mario”), usa:

=SE.ERRORE(SINISTRA(ANNULLA.SPAZI(STRINGA.ESTRAI(A2; TROVA(","; A2)+1; LUNGHEZZA(A2))); TROVA(" "; ANNULLA.SPAZI(STRINGA.ESTRAI(A2; TROVA(","; A2)+1; LUNGHEZZA(A2))))-1); 
ANNULLA.SPAZI(STRINGA.ESTRAI(A2; TROVA(","; A2)+1; LUNGHEZZA(A2))))

Questa formula restituisce il primo token (prima parola) dopo la virgola; se non trova un ulteriore spazio, restituisce l’intero contenuto successivo alla virgola.

Macro VBA per popolare una seconda colonna

Preferisci un approccio automatico che scriva direttamente i risultati? Ecco due macro: una essenziale e una robusta/veloce.

Macro essenziale (universale)

Questa macro legge la colonna A (righe 2–10, regolabili) e scrive il nome in colonna B:

Sub ExtractFirstName()
    Dim cell As Range, firstName As String
    For Each cell In Range("A2:A10")        'Regolare l'intervallo
        firstName = Trim(Mid(cell.Value, InStr(cell.Value, ",") + 2))
        cell.Offset(0, 1).Value = firstName 'Scrive il nome a destra (colonna B)
    Next cell
End Sub
  • InStr trova la posizione della virgola.
  • Mid estrae dal carattere successivo allo spazio dopo la virgola (+2).
  • Trim rimuove spazi residui.
  • Offset(0, 1) scrive nella colonna adiacente.

Nota: se in alcuni record manca lo spazio dopo la virgola, sostituisci + 2 con + 1 e mantieni Trim, così:

firstName = Trim(Mid(cell.Value, InStr(cell.Value, ",") + 1))

Macro robusta e veloce (gestione dati sporchi + ottimizzazioni)

Questa versione:

  • Rileva automaticamente l’ultima riga piena in colonna A;
  • Gestisce record senza virgola senza generare errori;
  • Tollera assenza/presenza di spazi dopo la virgola;
  • È performante su grandi dataset grazie alla disattivazione temporanea di schermata e ricalcolo.
Sub ExtractFirstNameFast()
    Dim ws As Worksheet, lastRow As Long, r As Long
    Dim s As String, p As Long, outVal As String
    Set ws = ActiveSheet
```
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

'Trova ultima riga usata in colonna A
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

For r = 2 To lastRow                      'Parti da riga 2, regola se serve
    s = CStr(ws.Cells(r, "A").Value)
    If Len(s) > 0 Then
        p = InStr(1, s, ",")
        If p > 0 Then
            outVal = Trim(Mid$(s, p + 1)) 'Dopo la virgola, anche senza spazio
        Else
            outVal = ""                   'Nessuna virgola: lascia vuoto
        End If
        ws.Cells(r, "B").Value = outVal    'Scrive in colonna B
    End If
Next r

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
```
End Sub 

Macro con espressione regolare (opzionale, ultra-tollerante)

Se i dati sono davvero disomogenei (spazi prima della virgola, doppi spazi, caratteri vari), una regex rende l’estrazione più affidabile. La macro usa late binding e non richiede l’impostazione manuale del riferimento alla libreria RegExp:

Sub ExtractFirstNameRegex()
    Dim ws As Worksheet, lastRow As Long, r As Long
    Dim s As String, m As Object, re As Object, outVal As String
```
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

Set re = CreateObject("VBScript.RegExp")
With re
    .Pattern = "^\s*[^,]+,\s*(.+)$"  'tutto dopo la prima virgola
    .IgnoreCase = True
    .Global = False
End With

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

For r = 2 To lastRow
    s = CStr(ws.Cells(r, "A").Value)
    If re.Test(s) Then
        Set m = re.Execute(s)(0)
        outVal = Trim$(m.SubMatches(0))
    Else
        outVal = ""
    End If
    ws.Cells(r, "B").Value = outVal
Next r

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
```
End Sub 

Funzione personalizzata (UDF) da usare come formula

Se preferisci mantenere la logica in una funzione richiamabile direttamente nel foglio (es.: =GetFirstName(A2)):

Function GetFirstName(ByVal s As String) As String
    Dim p As Long
    p = InStr(1, s, ",")
    If p > 0 Then
        GetFirstName = Trim(Mid$(s, p + 1))
    Else
        GetFirstName = ""
    End If
End Function

Inserisci il codice in un Modulo standard (ALT+F11 > Inserisci > Modulo), salva come cartella di lavoro con macro abilitata (.xlsm) e usa la funzione nel foglio.

Alternative senza formule né VBA

Riempimento rapido (Flash Fill)

  1. In B2 scrivi manualmente il risultato atteso (es.: Mario).
  2. Con B2 selezionata, premi CTRL+E (o Dati > Riempimento rapido).
  3. Excel riconosce il pattern “dopo la virgola” e compila automaticamente le righe sottostanti.

Pro: velocissimo per correzioni al volo. Contro: non è dinamico; se i dati in A cambiano, B non si aggiorna.

Testo in colonne

  1. Seleziona la colonna con i nomi (A).
  2. Vai su Dati > Testo in colonne > Delimitato.
  3. Spunta Virgola e, se necessario, anche Spazio.
  4. Completa la procedura: otterrai cognome in una colonna e nome in un’altra (se spunti anche Spazio potresti avere una colonna vuota in mezzo: eliminala).

Power Query (Ottimo per flussi ripetibili)

  1. Seleziona la tabella o intervallo dei dati > Dati > Da tabella/intervallo.
  2. In Power Query: Trasforma > Suddividi colonna > Per delimitatore > Delimitatore Virgola, Alla prima occorrenza.
  3. Rimuovi spazi con Trasforma > Formatta > Rimuovi spazi sulla colonna risultante.
  4. Carica su un nuovo foglio: i passaggi si riapplicheranno a ogni aggiornamento.

Best practice e convalida dei dati

  • Verifica la presenza della virgola: se il file contiene righe senza virgola, usa SE.ERRORE(...; "") oppure gestiscile in macro con un If (evita On Error Resume Next a meno che non sia indispensabile).
  • Spazi incoerenti: in formula usa ANNULLA.SPAZI; in VBA Trim.
  • Caratteri extra (es.: titolo accademico dopo la seconda virgola): le soluzioni base estraggono tutto dopo la prima virgola, come richiesto. Se vuoi solo la prima parola del nome, usa la variante con SINISTRA(...; TROVA(" "; ...)-1).
  • Omogeneità: valida a campione i risultati (filtri veloci, conta valori vuoti, rileva spazi iniziali/finali).

Prestazioni su grandi volumi

Su migliaia di righe conviene:

  • Usare la macro veloce che spegne ricalcolo e aggiornamento schermo.
  • Convertire formule in valori quando non servono più (Copia > Incolla speciale > Valori).
  • Limitare gli intervalli a range realmente popolati (ad es. tabella strutturata o rilevazione dell’ultima riga).

Procedura passo-passo consigliata (formula)

  1. Inserisci in B2 la formula veloce per 365: =SE.ERRORE(ANNULLA.SPAZI(TEXTAFTER(A2; ",")); "")
  2. Trascina la maniglia di riempimento verso il basso oppure, se usi Excel 365, valuta la versione “spiller” su tutto l’intervallo: =SE.ERRORE(ANNULLA.SPAZI(TEXTAFTER(A2:A1000; ",")); "")
  3. Controlla un campione di righe e applica un filtro per i vuoti in B per individuare i record privi di virgola.

Procedura passo-passo consigliata (macro VBA)

  1. Apri l’Editor VBA con ALT+F11, poi Inserisci > Modulo.
  2. Incolla la macro ExtractFirstNameFast (vedi sopra).
  3. Torna al foglio, premi ALT+F8, scegli ExtractFirstNameFast e premi Esegui.
  4. La macro analizzerà la colonna A (dalla riga 2) e scriverà il solo nome in colonna B.

Domande frequenti

La mia lista contiene “Cognome, Nome Secondo”. Otterrò solo “Nome”?
Con le formule base otterrai “Nome Secondo” (tutto dopo la virgola). Se vuoi solo la prima parola del nome, usa la variante che si ferma al primo spazio.

In alcuni record non c’è lo spazio dopo la virgola. È un problema?
No, usa una formula che cerca solo la virgola e poi ripulisce con ANNULLA.SPAZI, oppure la macro veloce con Trim(Mid(s, p + 1)).

Posso applicare l’estrazione a un’intera colonna in una volta?
Sì, con Excel 365 usa la versione “spiller” che accetta intervalli (es.: A2:A1000).

Come gestisco i record senza virgola?
Con SE.ERRORE(...; "") in formula o con un semplice If p > 0 Then in macro.

È meglio formula o macro?
Formula se il dataset è contenuto o vuoi un risultato dinamico; macro se vuoi prestazioni e controllo su grandi volumi o su processi ripetitivi.

Riepilogo soluzioni e quando usarle

ApproccioFormula/CodiceQuando usarloNote operative
Formula nativa (Excel 365/2021)=TEXTAFTER(A2; ", ")Dataset pulito e versione moderna di ExcelEstrae tutto dopo , ; copia verso il basso; valuta la variante con SE.ERRORE e ANNULLA.SPAZI per maggiore robustezza.
Formula tollerante (365)=SE.ERRORE(ANNULLA.SPAZI(TEXTAFTER(A2; ",")); "")Dati con spazi irregolari o alcuni record senza virgolaCerca solo la virgola, pulisce gli spazi, evita errori.
Compatibilità senza TEXTAFTER=STRINGA.ESTRAI(A2; TROVA(", "; A2)+2; LUNGHEZZA(A2) - TROVA(", "; A2) - 1)Versioni precedenti di ExcelFunziona con formati coerenti “, ”; vedi variante che cerca solo la virgola.
Compatibilità tollerante=SE.ERRORE(ANNULLA.SPAZI(STRINGA.ESTRAI(A2; TROVA(","; A2)+1; LUNGHEZZA(A2))); "")Versioni precedenti con spazi incoerentiEstrae dopo la virgola e ripulisce gli spazi; vuoto se manca la virgola.
Macro VBA universaleSub ExtractFirstName() Dim cell As Range, firstName As String For Each cell In Range("A2:A10") firstName = Trim(Mid(cell.Value, InStr(cell.Value, ",") + 2)) cell.Offset(0, 1).Value = firstName Next cell End SubPiccoli lotti, struttura fissaModifica intervallo e offset; sostituisci +2 con +1 se manca lo spazio.
Macro VBA veloceExtractFirstNameFastGrandi volumi, dati non perfettiDisattiva ricalcolo/schermo; rileva ultima riga; gestisce record senza virgola.
Regex (VBA)ExtractFirstNameRegexDati molto disomogeneiPattern affidabile per qualsiasi numero di spazi; late binding, nessun riferimento da impostare.
Riempimento rapidoCTRL+ECorrezioni spot, lavoro ad hocNon dinamico: se i dati cambiano, non si aggiorna.
Testo in colonne / Power QueryWizard / QueryFlussi ripetibili, ETLSplit per virgola, rimuovi spazi; in PQ i passaggi sono riapplicabili.

Consigli finali

  • Se l’obiettivo è solo “il testo dopo la prima virgola”, scegli la soluzione più semplice disponibile nella tua versione (TEXTAFTER se puoi).
  • Se hai dataset “sporchi”, usa le varianti con ANNULLA.SPAZI e SE.ERRORE o passa a VBA/Regex.
  • Per processi ripetuti, preferisci Power Query o macro ottimizzate.

Esempi pronti da copiare

  • 365 (tollerante): =SE.ERRORE(ANNULLA.SPAZI(TEXTAFTER(A2; ",")); "")
  • Compatibilità (tollerante): =SE.ERRORE(ANNULLA.SPAZI(STRINGA.ESTRAI(A2; TROVA(","; A2)+1; LUNGHEZZA(A2))); "")
  • Macro rapida: ExtractFirstNameFast (inserisci e lancia)

Con queste soluzioni, puoi scegliere la via più rapida (formula) o la più flessibile (VBA) a seconda della versione di Excel e delle esigenze di automazione, garantendo risultati puliti anche su dati non perfetti.

Bonus: se dopo l’estrazione vuoi unire di nuovo “nome cognome”, basta concatenare B2 (nome) e A2 (cognome prima della virgola). Con 365, ad esempio:

=TESTO.PRIMA(A2; ",") & " " & B2

dove TESTO.PRIMA (TEXTBEFORE in inglese) restituisce tutto prima della virgola.


Checklist rapida

  • Hai Excel 365/2021? Usa TEXTAFTER + ANNULLA.SPAZI + SE.ERRORE.
  • Versione precedente? Usa STRINGA.ESTRAI/TROVA/LUNGHEZZA con le stesse protezioni.
  • Grandi volumi o flusso ripetuto? Macro veloce o Power Query.
  • Dati “difficili”? Macro con regex.

Ora sei pronto a trasformare in pochi secondi una colonna “cognome, nome” in una colonna “nome” pulita, coerente e pronta per l’uso.

Indice