TOP

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

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:

  1. Function IF_GREEN(paid As Range, amount)  
  2.        
  3. 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:

    1. Function IF_GREEN(paid As Range, amount)  
    2.   
    3.      green_color = Sheets("Sheet1").Range("K1").Interior.color  
    4.   
    5. End Function  

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

    1. Function IF_GREEN(paid As Range, amount)  
    2.   
    3.      green_color = 5296274 'Verde  
    4.   
    5. End Function  

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

    1. Sub test_color()  
    2.      MsgBox ActiveCell.Interior.color  
    3. End Sub  

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

    1. Function IF_GREEN(paid As Range, amount)  
    2.        
    3.      Application.Volatile  
    4.        
    5.      green_color = 5296274 'Verde  
    6.       
    7.      If paid.Interior.color = green_color Then 'SE FOR VERDADE  
    8.         IF_GREEN = amount  
    9.      Else 'SE MENTIR  
    10.         IF_GREEN = 0  
    11.      End If  
    12.        
    13. 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:

    1. Sub refresh_macro()  
    2.      Application.Calculate  
    3. End Sub  

    Adicionalmente

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

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

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