Função VBA - Validador de CNPJ

Nesta postagem, estou disponibilizando a função VBA, ou seja, fórmula personalizada para Excel.

Segue o procedimento:

1º Pressione Alt+F11
2º Clique no Menu>Inserir>Modulo e cole o código abaixo.
3º Após isso clique na célula e digite =VALIDADOR_CNPJ(a celula que contem o cnpj)



Public Function VALIDADOR_CNPJ(CNPJ As String) As String
   
    Dim VarDigito1 As Integer
    Dim VarDigito2 As Integer
    Dim VarDigito3 As Integer
    Dim VarDigito4 As Integer
    Dim VarDigito5 As Integer
    Dim VarDigito6 As Integer
    Dim VarDigito7 As Integer
    Dim VarDigito8 As Integer
    Dim VarDigito9 As Integer
    Dim VarDigito10 As Integer
    Dim VarDigito11 As Integer
    Dim VarDigito12 As Integer
    Dim VarDigito13 As Integer
    Dim VarDigito14 As Integer
    Dim VarCalcDigito1 As Integer
    Dim VarCalcDigito2 As Integer
    Dim VarUltDig As Integer
   
    'Função adiciona o valor 0 à esquerda se não conter 14 dígitos.
    If Len(CNPJ) < 14 Then
       
        CNPJ = String(14 - Len(CNPJ), "0") & CNPJ
       
    End If
   
    'Variável recebe a posição do último dígito.
    VarUltDig = Len(CNPJ)
   
    'Sai da função caso a célula esteja vazia
    If CNPJ = Empty Then
       
        VALIDADOR_CNPJ = Empty
       
        Exit Function
       
    End If
   
    'Variáveis recebe o valor correspondente a cada dígito.
   
    VarDigito1 = CInt(Mid(CNPJ, VarUltDig - 13, 1))
    VarDigito2 = CInt(Mid(CNPJ, VarUltDig - 12, 1))
    VarDigito3 = CInt(Mid(CNPJ, VarUltDig - 11, 1))
    VarDigito4 = CInt(Mid(CNPJ, VarUltDig - 10, 1))
    VarDigito5 = CInt(Mid(CNPJ, VarUltDig - 9, 1))
    VarDigito6 = CInt(Mid(CNPJ, VarUltDig - 8, 1))
    VarDigito7 = CInt(Mid(CNPJ, VarUltDig - 7, 1))
    VarDigito8 = CInt(Mid(CNPJ, VarUltDig - 6, 1))
    VarDigito9 = CInt(Mid(CNPJ, VarUltDig - 5, 1))
    VarDigito10 = CInt(Mid(CNPJ, VarUltDig - 4, 1))
    VarDigito11 = CInt(Mid(CNPJ, VarUltDig - 3, 1))
    VarDigito12 = CInt(Mid(CNPJ, VarUltDig - 2, 1))
    VarDigito13 = CInt(Mid(CNPJ, VarUltDig - 1, 1))
    VarDigito14 = CInt(Mid(CNPJ, VarUltDig, 1))
   
    'Cálculo do Primeiro Dígito.
    VarCalcDigito1 = (VarDigito1 * 6) + (VarDigito2 * 7) + (VarDigito3 * 8) + (VarDigito4 * 9) + _
    (VarDigito5 * 2) + (VarDigito6 * 3) + (VarDigito7 * 4) + (VarDigito8 * 5) + (VarDigito9 * 6) + _
    (VarDigito10 * 7) + (VarDigito11 * 8) + (VarDigito12 * 9)
   
    VarCalcDigito1 = VarCalcDigito1 Mod 11   'Cálculo do Resto.
    'se o resto for igual a 10 recebe o valor 0
    If VarCalcDigito1 = 10 Then
       
        VarCalcDigito1 = 0
       
    End If
   
    'Cálculo do Segundo Dígito.
    VarCalcDigito2 = (VarDigito1 * 5) + (VarDigito2 * 6) + (VarDigito3 * 7) + (VarDigito4 * 8) + _
    (VarDigito5 * 9) + (VarDigito6 * 2) + (VarDigito7 * 3) + (VarDigito8 * 4) + (VarDigito9 * 5) + _
    (VarDigito10 * 6) + (VarDigito11 * 7) + (VarDigito12 * 8) + (VarCalcDigito1 * 9)
    VarCalcDigito2 = VarCalcDigito2 Mod 11    'Cálculo do Resto.
   
    'se o resto for igual a 10 recebe o valor 0
    If VarCalcDigito2 = 10 Then
        VarCalcDigito2 = 0
    End If
   
    'Fazendo a validação dos dados calculado x informado
    If VarDigito13 = VarCalcDigito1 And VarDigito14 = VarCalcDigito2 Then
       
        VALIDADOR_CNPJ = "CNPJ Válido"
       
    Else
   
        VALIDADOR_CNPJ = "CNPJ Inválido"
       
    End If


End Function

Comentários

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Public Function validateCNPJ(cnpj As String) As Boolean

    Dim digits(13) As Variant

    Dim stCalc As Variant: stCalc = Array(6, 7, 8, 9, 2, 3, 4, 5, 6, 7, 8, 9)
    Dim ndCalc As Variant: ndCalc = Array(5, 6, 7, 8, 9, 2, 3, 4, 5, 6, 7, 8, 9)

    Dim stRes As Long
    Dim ndRes As Long

    If Len(cnpj) < 14 Then

    cnpj = String(14 - Len(cnpj), "0") & cnpj

    End If

    For i = LBound(digits) To UBound(digits)

    digits(i) = Mid(cnpj, i + 1, 1)

    Next

    For i = LBound(stCalc) To UBound(stCalc)

    stRes = stRes + (digits(i) * stCalc(i))
    ndRes = ndRes + (digits(i) * ndCalc(i))

    Next

    stRes = stRes Mod 11

    If stRes = 10 Then stRes = 0

    ndRes = ndRes + (stRes * ndCalc(LBound(ndCalc)))

    ndRes = ndRes Mod 11

    If ndRes = 10 Then ndRes = 0

    If digits(12) = stRes And digits(13) = ndRes Then validateCNPJ = True Else validateCNPJ = False

    End Function

    ResponderExcluir
    Respostas
    1. na linha ndRes = ndRes + (stRes * ndCalc(LBound(ndCalc))), troque o LBound por UBound. o restante está 100%, muito obrigado pela ajuda

      Excluir

Postar um comentário

Postagens mais visitadas deste blog

Autocorreção no Excel - Eu Escrevo e o Excel Corrige.

Função VBA - Busca Distância Entre Cidades