TOP

VBA-Lição 14.2. Criando uma função personalizada

YouLibreCalc for Excel logo

Com VBA você pode criar uma função personalizada (chamada User Defined Function) que pode ser usada em planilhas como funções normais. Isso é útil quando as funções Excel existentes não são suficientes.

User Defined Function (UDF) é uma função criada pelo usuário que não existe na funcionalidade padrão Excel.

Neste exemplo, criaremos uma função IF personalizada que pode ser usada em cálculos em uma planilha, semelhante a outras funções Excel.


Para exibir o valor de (B2) se a célula (C2) tiver o valor ("YES"), poderíamos usar a função IF na fórmula =IF(C2="YES",B2,0):

Nosso objetivo neste caso é criar uma função que possa fazer isso =IF(C2 has a green background,B2,0) e que escreveríamos assim: =IF_GREEN(C2,B2):

Criando uma função personalizada (UDF)

Vamos começar a criar nossa própria função UDF:

Function IF_GREEN(paid As Range, amount)
     
End Function

Argumentos:

  • paid As Range : a célula que iremos verificar;
  • amount : o valor que inseriremos se TRUE.
  • Nesse caso, se a verificação retornar FALSE, o valor sempre será 0, portanto não há razão para especificar um argumento para ela.

    Para verificar se a cor está correta, você pode usar a célula que contém a cor necessária:

    Function IF_GREEN(paid As Range, amount)
    
         green_color = Sheets("Sheet1").Range("K1").Interior.color
    
    End Function
    

    Mas para evitar depender da célula, usaremos simplesmente o número da cor desejada:

    Function IF_GREEN(paid As Range, amount)
    
         green_color = 5296274 'Verde
    
    End Function
    

    Para determinar o número da cor de fundo de uma célula, selecione a célula e execute esta macro:

    Sub test_color()
         MsgBox ActiveCell.Interior.color
    End Sub
    

    Agora, tudo o que precisamos fazer é verificar a cor da célula usando IF:

    Function IF_GREEN(paid As Range, amount)
         
         Application.Volatile
         
         green_color = 5296274 'Verde
        
         If paid.Interior.color = green_color Then 'SE FOR VERDADE
            IF_GREEN = amount
         Else 'SE MENTIR
            IF_GREEN = 0
         End If
         
    End Function
    

    Agora nossa função está pronta para uso.

    Application.Volatile nos diz que o aplicativo (Excel) deve ser sensível a mudanças (como é o caso da função normal IF). Isso significa que ele recalculará a função sempre que o valor mudar. Por exemplo, se você alterar qualquer valor na coluna Valor (ou mesmo em qualquer outra célula), esta função será recalculada e o valor atualizado será exibido.

    Entretanto, alterar o preenchimento da célula não é o evento que aciona o recálculo. Para forçar o Excel a recalcular os valores, você pode selecionar qualquer célula vazia e clicar em Excluir, ou adicionar um botão Atualizar ("Refresh") que atualizará tudo quando você clicar nele:

    Sub refresh_macro()
         Application.Calculate
    End Sub
    

    Adicionalmente

    Abaixo está uma maneira abreviada de escrever a mesma função:

    Function IF_GREEN(paid As Range, amount)
         Application.Volatile
         IF_GREEN = 0 'SE MENTIR
         If paid.Interior.color = 5296274 Then IF_GREEN = amount 'SE FOR VERDADE
    End Function
    

    Você pode baixar o arquivo Excel contendo este exemplo clicando aqui: 🢃