Pular para o conteúdo
ValidadorCNPJ Gerar CNPJ

Planilhas

CNPJ alfanumérico no Excel

Fórmula pronta para validar, função VBA, como aplicar a máscara com letras e como parar de perder zeros à esquerda na importação.

1. Fórmula de validação (Microsoft 365 e Excel 2021)

Cole a fórmula abaixo em B2, considerando o CNPJ em A2 — com ou sem máscara, maiúsculas ou minúsculas. Ela devolve VERDADEIRO ou FALSO.

fórmula (versão pt-BR)
=LET(
  txt; MAIÚSCULA(A2);
  limpo; SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(txt;".";"");"/";"");"-";"");" ";"");
  base; ESQUERDA(limpo;12);
  v1; CÓDIGO(EXT.TEXTO(base;SEQUÊNCIA(12);1))-48;
  p1; MOD(12-SEQUÊNCIA(12);8)+2;
  r1; MOD(SOMARPRODUTO(v1;p1);11);
  d1; SE(r1<2;0;11-r1);
  base2; base&d1;
  v2; CÓDIGO(EXT.TEXTO(base2;SEQUÊNCIA(13);1))-48;
  p2; MOD(13-SEQUÊNCIA(13);8)+2;
  r2; MOD(SOMARPRODUTO(v2;p2);11);
  d2; SE(r2<2;0;11-r2);
  E(
    NÚM.CARACT(limpo)=14;
    ÉNÚM(VALOR(DIREITA(limpo;2)));
    DIREITA(limpo;2)=d1&d2
  )
)
Na versão em inglês do Excel, troque os nomes das funções (MAIÚSCULAUPPER, SUBSTITUIRSUBSTITUTE, ESQUERDALEFT, EXT.TEXTOMID, CÓDIGOCODE, SEQUÊNCIASEQUENCE, SOMARPRODUTOSUMPRODUCT, NÚM.CARACTLEN, DIREITARIGHT) e os ; por ,.

Transformando em função nomeada

Em Fórmulas → Gerenciador de Nomes, crie o nome CNPJ.VALIDO com a fórmula acima trocando A2 por cnpj e envolvendo tudo em LAMBDA(cnpj; ...). Depois é só usar =CNPJ.VALIDO(A2) em qualquer célula da pasta de trabalho.

2. Função VBA (qualquer versão do Excel)

Abra o editor com Alt+F11, insira um novo módulo e cole:

módulo vba
Option Explicit

Private Function CnpjLimpar(ByVal valor As String) As String
    Dim i As Long, c As String, saida As String

    valor = UCase$(valor)

    For i = 1 To Len(valor)
        c = Mid$(valor, i, 1)
        If (c >= "0" And c <= "9") Or (c >= "A" And c <= "Z") Then
            saida = saida & c
        End If
    Next i

    CnpjLimpar = saida
End Function

Private Function CnpjDigito(ByVal sequencia As String) As Long
    Dim i As Long, soma As Long, peso As Long, resto As Long
    Dim tamanho As Long: tamanho = Len(sequencia)

    For i = 1 To tamanho
        peso = ((tamanho - i) Mod 8) + 2
        soma = soma + (Asc(Mid$(sequencia, i, 1)) - 48) * peso
    Next i

    resto = soma Mod 11

    If resto < 2 Then
        CnpjDigito = 0
    Else
        CnpjDigito = 11 - resto
    End If
End Function

' =CNPJ_VALIDO(A2)
Public Function CNPJ_VALIDO(ByVal valor As String) As Boolean
    Dim cnpj As String, base As String, dv As String
    Dim i As Long

    cnpj = CnpjLimpar(valor)

    If Len(cnpj) <> 14 Then Exit Function

    For i = 13 To 14
        If Not (Mid$(cnpj, i, 1) >= "0" And Mid$(cnpj, i, 1) <= "9") Then Exit Function
    Next i

    base = Left$(cnpj, 12)
    dv = CStr(CnpjDigito(base))
    dv = dv & CStr(CnpjDigito(base & dv))

    CNPJ_VALIDO = (Mid$(cnpj, 13, 2) = dv)
End Function

' =CNPJ_FORMATAR(A2)  ->  12.ABC.345/01DE-35
Public Function CNPJ_FORMATAR(ByVal valor As String) As String
    Dim cnpj As String: cnpj = CnpjLimpar(valor)

    If Len(cnpj) <> 14 Then
        CNPJ_FORMATAR = cnpj
        Exit Function
    End If

    CNPJ_FORMATAR = Left$(cnpj, 2) & "." & Mid$(cnpj, 3, 3) & "." & _
                    Mid$(cnpj, 6, 3) & "/" & Mid$(cnpj, 9, 4) & "-" & Right$(cnpj, 2)
End Function

Salve a planilha como .xlsm, senão as funções somem ao fechar o arquivo.

3. Aplicar a máscara com letras

Formato personalizado de célula (00"."000"."000"/"0000"-"00) só funciona com números. Como o CNPJ agora é texto, use uma coluna calculada:

máscara por fórmula
=SE(NÚM.CARACT(A2)<>14;A2;
   ESQUERDA(A2;2)&"."&EXT.TEXTO(A2;3;3)&"."&EXT.TEXTO(A2;6;3)&"/"&EXT.TEXTO(A2;9;4)&"-"&DIREITA(A2;2))

4. Não perder zeros à esquerda nem transformar em número

5. Power Query (limpeza em massa)

power query (linguagem M)
let
    Origem = Excel.CurrentWorkbook(){[Name="Empresas"]}[Content],
    ComoTexto = Table.TransformColumnTypes(Origem, {{"CNPJ", type text}}),
    Limpo = Table.TransformColumns(ComoTexto, {{"CNPJ", each
        Text.Select(Text.Upper(_), {"0".."9", "A".."Z"}), type text}}),
    Filtrado = Table.SelectRows(Limpo, each Text.Length([CNPJ]) = 14)
in
    Filtrado

Depois de limpar, use a coluna calculada com =CNPJ_VALIDO() para separar o que reprova. Se você tem uma base grande para auditar, o gerador ajuda a testar a planilha antes de rodar no arquivo de verdade.

Continue por aqui

Dúvidas sobre CNPJ no Excel

Como validar CNPJ alfanumérico no Excel?

Com uma fórmula única usando LET, SEQUÊNCIA, CÓDIGO e SOMARPRODUTO (Microsoft 365 / Excel 2021), ou com uma função VBA em planilhas mais antigas. As duas versões estão nesta página, prontas para copiar.

Por que o Excel some com os zeros à esquerda do CNPJ?

Porque ele interpreta o valor como número. Formate a coluna como Texto antes de colar os dados, ou importe o arquivo pelo assistente de texto marcando a coluna como Texto. Com o formato alfanumérico esse problema tende a diminuir, mas continua valendo para os CNPJs antigos.

Como aplicar a máscara 00.000.000/0000-00 quando o CNPJ tem letras?

Formato personalizado de célula não funciona com texto. Use uma coluna calculada com ESQUERDA/EXT.TEXTO concatenando os separadores — a fórmula está abaixo.

A função VBA funciona no LibreOffice e no Google Sheets?

No LibreOffice o VBA funciona com pequenos ajustes (ative a compatibilidade de macros). No Google Sheets, use Apps Script: o código JavaScript da página de JavaScript roda quase sem alteração como função personalizada.