Validar CPF no Excel com VBA: Função para Planilhas
Sem precisar do gerador de CPF online aberto em outra aba ou copiar código de outra linguagem: esta função VBA valida CPF direto no Excel pelo algoritmo de módulo 11. Funciona como fórmula nativa — basta digitar =lfValidaCPF(A1).
Código
'Função que valida CPF
Public Function lfValidaCPF(ByVal lNumCPF As String) As Boolean
Application.Volatile
Dim lMultiplicador As Integer
Dim lDv1 As Integer
Dim lDv2 As Integer
lMultiplicador = 2
'Realiza o preenchimento dos zeros à esquerda
lNumCPF = String(11 - Len(lNumCPF), "0") & lNumCPF
'Rejeita CPFs com todos os dígitos iguais (ex: 11111111111)
If lNumCPF = String(11, Left(lNumCPF, 1)) Then
lfValidaCPF = False
Exit Function
End If
'Realiza o cálculo do dividendo para o dv1 e o dv2
For i = 9 To 1 Step -1
lDv1 = (Mid(lNumCPF, i, 1) * lMultiplicador) + lDv1
lDv2 = (Mid(lNumCPF, i, 1) * (lMultiplicador + 1)) + lDv2
lMultiplicador = lMultiplicador + 1
Next
'Realiza o cálculo para chegar no primeiro dígito
lDv1 = lDv1 Mod 11
If lDv1 >= 2 Then
lDv1 = 11 - lDv1
Else
lDv1 = 0
End If
'Realiza o cálculo para chegar no segundo dígito
lDv2 = lDv2 + (lDv1 * 2)
lDv2 = lDv2 Mod 11
If lDv2 >= 2 Then
lDv2 = 11 - lDv2
Else
lDv2 = 0
End If
'Realiza a validação e retorna na função
If Right(lNumCPF, 2) = CStr(lDv1) & CStr(lDv2) Then
lfValidaCPF = True
Else
lfValidaCPF = False
End If
End FunctionAnálise do código
String(11 - Len(lNumCPF), "0") & lNumCPF faz o padding com zeros à esquerda caso o CPF tenha menos de 11 caracteres (ex: CPFs que começam com 0).
lNumCPF = String(11, Left(lNumCPF, 1)) compara o CPF com uma string de 11 caracteres iguais ao primeiro dígito, rejeitando sequências como 11111111111 ou 00000000000 que passam no cálculo de módulo 11 mas não são CPFs válidos.
O loop For i = 9 To 1 Step -1 percorre os 9 primeiros dígitos de trás pra frente, acumulando simultaneamente as somas ponderadas para ambos os dígitos verificadores. lDv1 usa pesos de 2 a 10, lDv2 usa pesos de 3 a 11 (multiplicador + 1).
Após o loop, cada soma passa por Mod 11 com a regra: resto >= 2 → 11 - resto, senão → 0. Para o segundo dígito, soma-se lDv1 * 2 antes do módulo (incorporando o primeiro verificador no cálculo).
Right(lNumCPF, 2) compara os dois últimos dígitos com os calculados.
Uso no Excel
- Abra o editor VBA: Alt+F11
- Insira um novo módulo: Inserir > Módulo
- Cole o código acima
- Use como fórmula:
=lfValidaCPF(A1)Retorna TRUE para CPFs válidos, FALSE para inválidos.
Testes
Sub de teste para validar no editor VBA (F5):
Sub TestValidaCPF()
' Testa CPF válido
Debug.Assert lfValidaCPF("52998224725") = True
' Testa CPF válido com zeros à esquerda
Debug.Assert lfValidaCPF("03827793637") = True
' Testa CPF com dígitos repetidos (inválido)
Debug.Assert lfValidaCPF("11111111111") = False
' Testa CPF com dígito verificador incorreto
Debug.Assert lfValidaCPF("52998224726") = False
MsgBox "Todos os testes passaram!"
End SubPara gerar CPFs válidos e preencher a planilha de teste, use o gerador de CPF online.
Quer gerar CPFs direto na planilha em vez de copiar do gerador online? Veja a macro VBA para geração de CPF.