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:

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: 🢃