Tem uma coluna no Excel no formato sobrenome, nome e quer pegar só o primeiro nome? Veja a melhor fórmula (com TEXTAFTER
), uma alternativa compatível com versões antigas e um macro VBA para processar a coluna toda, com dicas para erros, regionalização e desempenho.
Visão geral
O cenário clássico é ter um intervalo com valores como Silva, Ana
, Oliveira, Maria Clara
, etc., e você precisa extrair apenas o que vem depois da sequência vírgula+espaço (,
) — isto é, o “primeiro nome” (que pode ser composto). Abaixo você encontra três abordagens:
- Fórmula com
TEXTAFTER
: simples, moderna e robusta. - Fórmula compatível: funciona no Excel antigo (sem
TEXTAFTER
). - VBA: percorre uma coluna e grava o resultado ao lado.
Exemplo rápido
Supondo os dados na coluna A (a partir de A2):
Entrada (A) | Resultado esperado (primeiro nome) | Observações |
---|---|---|
Silva, Ana | Ana | Formato perfeito |
Oliveira, Maria Clara | Maria Clara | Nome composto |
Ferreira, Carlos | Carlos | Dois espaços depois da vírgula |
Farias Neto, Pedro | Pedro | Sobrenome composto |
ALMEIDA, julia | julia | Espaços + caixa irregular |
SemVirgula | (vazio) | Sem delimitador “,” |
Lima , Rafael | Rafael | Espaço antes da vírgula |
Costa, Ana, Paula | Ana, Paula | Mais de uma vírgula (exemplo especial) |
Fórmula com TEXTAFTER (mais simples)
Se você já tem o Microsoft 365 com as funções modernas, esta é a forma mais direta:
=TRIM(TEXTAFTER(A2, ", "))
Explicação:
TEXTAFTER(A2, ", ")
devolve tudo que vem depois da sequência,
.TRIM(...)
remove espaços extras no começo/fim e normaliza múltiplos espaços internos.
Para evitar erros quando a célula não tiver vírgula, envolva com IFERROR
:
=IFERROR(TRIM(TEXTAFTER(A2, ", ")), "")
Variação tolerante a espaços irregulares
Se houver casos como "Sobrenome , Nome"
(espaços espalhados), use a vírgula como delimitador, sem o espaço, e deixe o TRIM
limpar:
=IFERROR(TRIM(TEXTAFTER(A2, ",")), "")
Quando há várias vírgulas
Por padrão, TEXTAFTER
pega o que vem após a primeira vírgula. Se você precisar do texto após a última vírgula (por exemplo, "Silva, Ana, Filha"
→ "Filha"
), use o argumento opcional de instância com valor negativo:
=IFERROR(TRIM(TEXTAFTER(A2, ",", -1)), "")
Refinando com LET (opcional)
Para fórmulas mais legíveis e fáceis de manter:
=LET(x, A2, IFERROR(TRIM(TEXTAFTER(x, ",")), ""))
Dica: em algumas localizações, o separador de argumentos é
;
em vez de,
. Se o Excel acusar erro de sintaxe, troque as vírgulas por ponto e vírgula.
Fórmula sem TEXTAFTER (compatibilidade)
Funciona em versões antigas do Excel (2010/2013/2016/2019) e em ambientes sem as funções novas:
=TRIM(MID(A2, FIND(", ", A2) + 2, LEN(A2)))
Explicação:
FIND(", ", A2)
devolve a posição do delimitador,
.+ 2
avança duas posições (vírgula + espaço).MID(A2, ... , LEN(A2))
pega todo o resto da string a partir desse ponto.TRIM(...)
elimina espaços extras.
Para tolerar espaços irregulares e células sem vírgula, use a vírgula isolada e IFERROR
:
=IFERROR(TRIM(MID(A2, FIND(",", A2) + 1, LEN(A2))), "")
Após a última vírgula no Excel antigo
Sem TEXTAFTER
, dá para localizar a última vírgula substituindo-a por um marcador temporário e encontrando sua posição:
=TRIM(
MID(
A2,
FIND("@", SUBSTITUTE(A2, ",", "@", LEN(A2)-LEN(SUBSTITUTE(A2, ",", "")))) + 1,
LEN(A2)
)
)
O truque é esse: LEN(A2)-LEN(SUBSTITUTE(A2,",",""))
conta quantas vírgulas existem; depois, SUBSTITUTE(..., ",", "@", <quantidade>)
troca a última vírgula pelo símbolo @
. Em seguida, FIND
localiza o @
, e MID
extrai tudo depois dele. Finalize com TRIM
.
VBA para percorrer a coluna
Se você preferir um processo pontual (sem fórmulas), o VBA é prático. O exemplo abaixo lê cada célula em A2:A10
, encontra a sequência ,
e grava o texto após ela na coluna ao lado (B):
Sub ExtrairPrimeiroNome()
Dim c As Range, p As Long
For Each c In Range("A2:A10") ' ajuste o intervalo
p = InStr(c.Value, ", ")
If p > 0 Then c.Offset(0, 1).Value = Trim(Mid(c.Value, p + 2))
Next c
End Sub
VBA usando Split (simples e legível)
Sub ExtrairPrimeiroNomeSplit()
Dim c As Range, partes() As String
For Each c In Range("A2:A10") ' ajuste o intervalo
partes = Split(c.Value, ",")
If UBound(partes) >= 1 Then
c.Offset(0, 1).Value = Trim(partes(1))
Else
c.Offset(0, 1).Value = ""
End If
Next c
End Sub
VBA rápido para intervalos grandes
Para centenas de milhares de linhas, é melhor trabalhar em memória (array) e escrever de volta ao final:
Sub ExtrairPrimeiroNomeRapido()
Dim ws As Worksheet, rng As Range, v, out(), i As Long, p As Long
Set ws = ActiveSheet
Set rng = ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp))
If rng.Rows.Count = 1 And rng.Value = "" Then Exit Sub```
v = rng.Value ' carrega dados da coluna A
ReDim out(1 To UBound(v, 1), 1 To 1)
For i = 1 To UBound(v, 1)
p = InStr(1, v(i, 1), ",")
If p > 0 Then
out(i, 1) = Trim(Mid$(v(i, 1), p + 1))
Else
out(i, 1) = ""
End If
Next i
rng.Offset(0, 1).Resize(UBound(out, 1), 1).Value = out ' grava na coluna B
```
End Sub
Função personalizada (UDF) para usar na planilha
Se quiser chamar uma função direto na célula, crie esta UDF:
Function PrimeiroNomeDepoisDaVirgula(ByVal Texto As String) As String
Dim p As Long
p = InStr(1, Texto, ",")
If p > 0 Then
PrimeiroNomeDepoisDaVirgula = Trim(Mid$(Texto, p + 1))
Else
PrimeiroNomeDepoisDaVirgula = ""
End If
End Function
Depois, em B2, use:
=PrimeiroNomeDepoisDaVirgula(A2)
Passo a passo para rodar o VBA
- Pressione Alt + F11 para abrir o Editor do VBA.
- Menu Inserir > Módulo e cole um dos códigos acima.
- Volte ao Excel, salve como pasta habilitada para macro (
.xlsm
). - Pressione Alt + F8, selecione a macro e clique em Executar.
Soluções nativas sem fórmula nem código
Texto para Colunas
- Selecione a coluna com os nomes (A).
- Acesse Dados > Texto para Colunas.
- Escolha Delimitado > Avançar > marque Vírgula (desmarque outros).
- Avançar > Concluir. O primeiro nome irá para a coluna B.
Preenchimento Relâmpago (Flash Fill)
- Em B2, digite manualmente o primeiro nome referente a A2.
- Comece a digitar em B3; o Excel sugerirá um padrão.
- Confirme com Ctrl + E.
Casos especiais e como tratar
Cenário | Sugestão (Excel moderno) | Sugestão (Excel antigo) |
---|---|---|
Sem vírgula na célula | =IFERROR(TRIM(TEXTAFTER(A2, ",")), "") | =IFERROR(TRIM(MID(A2, FIND(",", A2)+1, LEN(A2))), "") |
Espaços “grudados” ou múltiplos | =TRIM(TEXTAFTER(A2, ",")) | =TRIM(MID(A2, FIND(",", A2)+1, LEN(A2))) |
Caracteres invisíveis (quebra de linha, NBSP) | =TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))) em pré-tratamento | Mesma ideia: aplique CLEAN e SUBSTITUTE antes de extrair |
Após a última vírgula | =TRIM(TEXTAFTER(A2, ",", -1)) | Fórmula “do marcador” com SUBSTITUTE (veja acima) |
Delimitador diferente (por ex., ponto e vírgula) | Troque "," por ";" na fórmula | Troque "," por ";" nas funções |
Deseja capitalizar o primeiro nome | =PROPER( TRIM(TEXTAFTER(A2, ",")) ) | =PROPER( TRIM(MID(A2,FIND(",",A2)+1,LEN(A2))) ) |
Desempenho e boas práticas
- Planilhas pequenas a médias (até dezenas de milhares de linhas): fórmulas são simples, auditáveis e atualizam sozinhas.
- Planilhas enormes (centenas de milhares/milhões): prefira um processo pontual (VBA, Texto para Colunas ou Power Query) para evitar recálculos custosos.
- Após conferir os resultados, considere colar como valores para “congelar” o texto e agilizar a pasta.
- Se usar fórmulas com
FIND
/SEARCH
,TRIM
quase sempre ajuda a limpar espaços antes de comparações.
FAQ rápidas
Quais versões do Excel têm TEXTAFTER
? Ele faz parte do conjunto de funções mais recentes do Microsoft 365. Em versões antigas, use a alternativa com MID
/FIND
.
Posso sobrescrever a própria coluna? Use uma coluna auxiliar para gerar os primeiros nomes, depois copie e cole como valores de volta na coluna original (com cuidado para não perder dados).
Também preciso do sobrenome. Para o que vem antes da vírgula, use no Excel moderno: =TRIM(TEXTBEFORE(A2, ","))
; no Excel antigo: =TRIM(LEFT(A2, FIND(",", A2) - 1))
.
Compatibilidade de nomes de funções e regionalização
As fórmulas acima estão no padrão em inglês. Em ambientes lusófonos, nomes e separadores podem variar. Alguns mapeamentos comuns (podem mudar conforme a versão/local):
Inglês | Português (comum) | Observações |
---|---|---|
TRIM | ARRUMAR | Remove espaços extras |
MID | EXT.TEXTO | Extrai parte de texto por posição |
LEN | NÚM.CARACT | Conta caracteres |
FIND | LOCALIZAR | Difere de SEARCH/PROCURAR por considerar maiúsc./minúsc. |
SEARCH | PROCURAR | Ignora maiúsc./minúsc. |
TEXTAFTER | (equivalente local, por ex. “Texto após”) | O nome exato pode variar conforme região/versão |
IFERROR | SEERRO | Trata erros e permite retorno alternativo |
CLEAN | LIMPAR | Remove caracteres não imprimíveis |
SUBSTITUTE | SUBSTITUIR | Troca ocorrências de texto |
PROPER | NOMEPROPRIO | Capitaliza nomes |
Além disso, em muitas configurações lusófonas o separador de argumentos é ponto e vírgula (;
) — ajuste se necessário.
Escolha rápida: quando usar cada opção
Método | Use quando… | Prós | Contras |
---|---|---|---|
Fórmula com TEXTAFTER | Você tem Microsoft 365 atualizado | Simples, legível, robusto (instância negativa, erro opcional) | Indisponível em versões antigas |
Fórmula compatível (MID/FIND) | Versões antigas do Excel | Alta compatibilidade, sem dependência de funções novas | Um pouco mais longa e menos intuitiva |
VBA | Precisa “resolver e fixar” de uma vez; volumes muito grandes | Rápido em massa, resultado gravado como valor | Exige habilitar macros e manter código |
Texto para Colunas | Transformação pontual e guiada | Sem fórmulas, fácil para usuários iniciantes | Não “acompanha” dados novos automaticamente |
Preenchimento Relâmpago | Padrões visuais simples | Rápido, sem fórmulas | Dependente de reconhecimento de padrão |
Resumo prático
- Melhor atalho hoje:
=IFERROR(TRIM(TEXTAFTER(A2, ",")), "")
. Funciona bem mesmo com espaços “tortos”. - Excel antigo:
=IFERROR(TRIM(MID(A2, FIND(",", A2) + 1, LEN(A2))), "")
. - Várias vírgulas: moderno →
TEXTAFTER
com-1
; antigo → “marcador” comSUBSTITUTE
. - Volumes enormes: VBA ou Texto para Colunas/Power Query, depois colar como valores.
Copie e cole as principais soluções:
Excel moderno:
=TRIM(TEXTAFTER(A2, ", "))
=IFERROR(TRIM(TEXTAFTER(A2, ", ")), "")
=IFERROR(TRIM(TEXTAFTER(A2, ",")), "")
=IFERROR(TRIM(TEXTAFTER(A2, ",", -1)), "")
Excel antigo:
=TRIM(MID(A2, FIND(", ", A2) + 2, LEN(A2)))
=IFERROR(TRIM(MID(A2, FIND(",", A2) + 1, LEN(A2))), "")
Após a última vírgula (sem TEXTAFTER):
=TRIM(
MID(
A2,
FIND("@", SUBSTITUTE(A2, ",", "@", LEN(A2)-LEN(SUBSTITUTE(A2, ",", "")))) + 1,
LEN(A2)
)
)
Com essas opções, você cobre do Excel mais recente ao legado, lida com espaços extras, várias vírgulas e milhares de linhas sem suar. Escolha a abordagem que combina com sua versão e com o volume de dados — e siga em frente 😉