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

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).