UDFs (User Defined Functions) são funções que você escreve em VBA e usa como qualquer função nativa do Excel — digita =MinhaFunção(A2) na célula e ela calcula. São a solução quando as funções nativas do Excel não chegam onde você precisa.
Estrutura de uma UDF
Function NomeDaFunção(parâmetro1 As Tipo, parâmetro2 As Tipo) As TipoRetorno
' Lógica aqui
NomeDaFunção = resultado
End Function
A diferença de uma Sub (macro) para uma Function (UDF): a Function retorna um valor através do nome da própria função.
Exemplo 1: converter texto em CPF formatado
Function FormataCPF(cpf As String) As String
cpf = Replace(cpf, ".", "")
cpf = Replace(cpf, "-", "")
cpf = Right("00000000000" & cpf, 11)
FormataCPF = Left(cpf, 3) & "." & Mid(cpf, 4, 3) & "." & _
Mid(cpf, 7, 3) & "-" & Right(cpf, 2)
End Function
Use na planilha: =FormataCPF(A2). Converte "12345678901" em "123.456.789-01".
Exemplo 2: extrair somente números de um texto
Function SoNumeros(texto As String) As String
Dim i As Integer, resultado As String
For i = 1 To Len(texto)
If Mid(texto, i, 1) >= "0" And Mid(texto, i, 1) <= "9" Then
resultado = resultado & Mid(texto, i, 1)
End If
Next i
SoNumeros = resultado
End Function
Útil para limpar campos mistos: =SoNumeros("R$ 1.234,56") retorna "123456".
Exemplo 3: calcular a moda de um intervalo
Function ModaTexto(intervalo As Range) As String
Dim cel As Range, maxCount As Long, currCount As Long
Dim maxVal As String
For Each cel In intervalo
currCount = WorksheetFunction.CountIf(intervalo, cel.Value)
If currCount > maxCount Then
maxCount = currCount
maxVal = cel.Value
End If
Next cel
ModaTexto = maxVal
End Function
Diferente de MODO (que só funciona com números), esta UDF encontra o valor mais frequente em um intervalo de texto.
Dicas importantes
- UDFs ficam no módulo VBA do arquivo — o arquivo precisa ser salvo como .xlsm
- UDFs não podem alterar formatação de células, só retornar valores
- Para que a UDF fique disponível em todas as pastas de trabalho, salve no arquivo Personal.xlsb
- Use
Application.Volatileno início se a função deve recalcular sempre que qualquer célula muda
Perguntas frequentes
UDFs são mais lentas que funções nativas?
Sim, consideravelmente. Para cálculos em grandes volumes de dados, prefira funções nativas ou, se possível, LAMBDA (que roda no motor nativo do Excel). Use UDFs para lógica que não tem equivalente nativo.
Posso usar UDFs criadas no VBA no Microsoft 365?
Sim, VBA funciona no Excel desktop do Microsoft 365. Não funciona no Excel Online (browser).