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
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
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
-
- End Function
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
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
-
- If paid.Interior.color = green_color Then
- IF_GREEN = amount
- Else
- IF_GREEN = 0
- End If
-
- End Function
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
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
- If paid.Interior.color = 5296274 Then IF_GREEN = amount
- End Function
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: 🢃