Tutorial: Função Personalizada para Somar Células Coloridas

Tempo de leitura:

3–5 minutes

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:


Comments

Leave a Reply

Discover more from Exceldriven

Subscribe now to keep reading and get access to the full archive.

Continue reading