Tempo de leitura:
Neste artigo vou mostrar-te como podes contar células por cor, o que parece ser algo simples, principalmente se usamos uma tabela onde podemos executar um filtro baseado numa cor, mas neste cenário a lógica é obter o resultado sem alterar a base de dados. Ao mesmo tempo podemos também pensar que podemos utilizar funções como CONTAR.SE [COUNTIF] ou SOMA.SE [SUMIF] mas neste cenário também não temos um “critério” em particular para assumir no cálculo.
Vou então mostrar-te como podes usar VBA, para criar uma função personalizada que realiza o cálculo.
Assim neste artigo vais aprender:
- Como usar VBA para criar funções personalizadas em Excel
- Aplicar a lógica de cálculo para Contar ou Somar valores
Iniciar o Visual Basic para criar a função
No ficheiro de base temos um intervalo com dados que será usado como exemplo.

Acedemos ao Visual Basic Editor através do Menu Programador [Programmer] e ao botão Visual Basic Editor. Caso não tenhas ainda o menu, podes pressionar o botão direito do rato para aceder à personalização do Friso [Ribbon] e ativar o menu. Podes ainda aceder ao Visual Basic pelo atalho [Alt] + [F11].

Uma vez no Visual Basic iniciamos um novo módulo que vai conter o nosso código.

Criar a lógica da função
Uma função personalizada, criada em Visual Basic, funciona mecanicamente da mesma forma que uma Sub Rotina com a particularidade de devolver um valor e poder ser usada ou invocada diretamente na folha de cálculo.

Definir a função
A definição da função passa por utilizar a expressão Function e definir o seu nome. Neste caso a função terá 2 argumentos (CorReferencia e Intervalo)
- CorReferencia será uma célula que o utilizador seleciona para obter a cor pretendida.
- Intervalo é um conjunto de células que será calculada.
Definimos ainda o tipo de dados de cada argumento “Range” e o tipo de dados que a função devolve -> Long
Function ContarPorCor(CorReferencia As Range, Intervalo As Range) As Long
Código inserido aqui…
End Function
Definir os componentes da função
De seguida definimos os componentes da função através da atribuição de variáveis e a indicação para tornar a aplicação volátil (Permite atualizar o cálculo sempre que uma célula altera na folha)
'Definir a função como volátil para atualizar
Application.Volatile
' Definir as variáveis para o código
Dim Celula As Range
Dim Contador As Long
Dim CorProcurada As Long
' Obtém a cor da célula de referência
CorProcurada = CorReferencia.Interior.Color
' Inicializa o contador
Contador = 0
As variáveis permitem definir a célula “Celula” que vai iterar o intervalo. O “Contador” representa o valor armazenado na contagem de células, e a “CorProcurada” permite guardar o número da cor selecionada.
A CorProcurada é armazenada através da obtenção da propriedade Interior.Color da célula selecionada.
Definir a mecânica da função
O próximo passo representa a mecânica da função que funciona através de um Ciclo For Each, que permite iterar todas as células do intervalo -> Parâmetro da Função e definir para a célula, caso tenha a cor -> Expressão IF ser adicionada à contagem -> Contador + 1
' Percorre as células do intervalo
For Each Celula In Intervalo
If Celula.Interior.Color = CorProcurada Then
Contador = Contador + 1
End If
Next Celula
Retornar o valor da função
A última parte do código, sendo este uma função, necessita de chamar a função pelo menos uma vez e indicar o valor a devolver.
' Retorna o número de células com a cor especificada
ContarPorCor = Contador
Eis o código completo:
O código é o seguinte:
Function ContarPorCor(CorReferencia As Range, Intervalo As Range) As Long
Application.Volatile 'Difinir a função como volátil para atualizar
' Definir as variáveis para o código
Dim Celula As Range
Dim Contador As Long
Dim CorProcurada As Long
' Obtém a cor da célula de referência
CorProcurada = CorReferencia.Interior.Color
' Inicializa o contador
Contador = 0
' Percorre as células do intervalo
For Each Celula In Intervalo
If Celula.Interior.Color = CorProcurada Then
Contador = Contador + 1
End If
Next Celula
' Retorna o número de células com a cor especificada
ContarPorCor = Contador
End Function
Cenário para Somar por Cor
Neste próximo cenário vou mostrar-te uma variante do código onde podes criar outra função para Somar valores por cor. A técnica é a mesma só tens que alterar algumas partes do código.

Aqui podes consultar o código completo:
Function SomarPorCor(CorReferencia As Range, Intervalo As Range) As Double
Application.Volatile
' Definir as variáveis
Dim Celula As Range
Dim Soma As Double
Dim CorProcurada As Long
' Obtém a cor da célula de referência
CorProcurada = CorReferencia.Interior.Color
' Inicializa a soma
Soma = 0
' Percorre as células do intervalo
For Each Celula In Intervalo
If Celula.Interior.Color = CorProcurada Then
' Somar apenas se a célula contiver um número
If IsNumeric(Celula.Value) Then
Soma = Soma + Celula.Value
End If
End If
Next Celula
' Retorna o total da soma das células com a cor especificada
SomarPorCor = Soma
End Function
Definir outro intervalo para somar
Podes ainda melhorar a função e definir outro intervalo a Somar…

Assim podes atribuir várias técnicas para calcular valores por cor!
Próximo artigo:
Artigo Anterior:
Ficheiros
Artigos por Categoria
- Microsoft Excel (40)
- Power Apps (16)
- Power Automate (3)
- Power BI (10)
- Power Query (12)
- Python (3)
- VBA (7)

Leave a Reply