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):
Vamos começar a criar nossa própria função UDF:
Function IF_GREEN(paid As Range, amount) End Function
Argumentos:
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.
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
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: 🢃