Função para Validar CPF no Excel (VBA)
Função VBA para validar CPF direto no Excel usando o algoritmo de módulo 11. Funciona como fórmula nativa — basta referenciar uma célula com =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
'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 Function
Aná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).
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 Sub
Para gerar CPFs válidos e preencher a planilha de teste, use o gerador de CPF online.