Como Contar e Somar Células por Cor de Fundo no Excel

Como Contar e Somar Células por Cor de Fundo no Excel

Neste artigo, você vai aprender como contar células por cor no Excel e obter a soma das células coloridas. Essas soluções funcionam tanto para células coloridas manualmente quanto com formatação condicional. Você também vai ver como filtrar células por várias cores no Excel 2010, 2013, 2016 e 2019.

Se você costuma usar várias cores de preenchimento e fonte para diferenciar vários tipos de células ou valores, eu aposto que é de seu interesse aprender contar quantas células são realçadas com uma determinada cor na planilha. Se os valores das células forem números, é possivel calcular automaticamente a soma das células sombreadas com a mesma cor.

Talvez você já saiba que o Microsoft Excel fornece uma variedade de fórmulas para diferentes propósitos, e seria lógico supor que existam algumas para contar células por cor. Mas, é uma pena que ainda não exista uma fórmula que nos permita somar ou contar por cores em uma planilha Excel comum.

Como contar e somar por cor no Excel

Suponha que a gente tenha uma tabela listando os pedidos de sua empresa onde as células na coluna Entrega são coloridas com base em seu valor – as células “Vence em X dias” são laranja, os itens “Entregues” são verdes e os pedidos “Vencidos” são vermelhos.

O que queremos agora é contar automaticamente as células por cor, ou seja, calcular o número de células vermelhas, verdes e laranja na planilha. Como expliquei, não existe uma solução direta para essa tarefa. Mas, para nossa alegria, podemos desenvolver isso no VBA. Então, prossiga com as 5 etapas rápidas abaixo e você saberá o número e a soma de seus células coloridas em poucos minutos.

  1. Abra sua pasta de trabalho do Excel e pressione Alt + F11 para abrir o Editor do Visual Basic.
  2. Clique com o botão direito do mouse no nome da pasta de trabalho em “EstaPastaDeTrabalho” na parte direita da tela e escolha Inserir > Módulo no menu de contexto.

3. Adicione o seguinte código na planilha:

Function PegarCorDaCelula(xlRange As Range)
            Dim indLinha, indColuna As Long
            Dim arResults()
     
            Application.Volatile
     
            If xlRange Is Nothing Then
                    Set xlRange = Application.ThisCell
            End If
     
            If xlRange.Count > 1 Then
                ReDim arResults(1 To xlRange.Rows.Count, 1 To xlRange.Columns.Count)
                 For indRow = 1 To xlRange.Rows.Count
                     For indColuna = 1 To xlRange.Columns.Count
                         arResults(indLinha, indColuna) = xlRange(indLinha, indColuna).Interior.Color
                     Next
                 Next
             PegarCorDaCelula = arResults
            Else
             PegarCorDaCelula = xlRange.Interior.Color
            End If
    End Function
     
    Function PegarCorDaFonte(xlRange As Range)
            Dim indLinha, indColuna As Long
            Dim arResults()
     
            Application.Volatile
     
            If xlRange Is Nothing Then
                    Set xlRange = Application.ThisCell
            End If
     
            If xlRange.Count > 1 Then
                ReDim arResults(1 To xlRange.Rows.Count, 1 To xlRange.Columns.Count)
                 For indLinha = 1 To xlRange.Rows.Count
                     For indColuna = 1 To xlRange.Columns.Count
                         arResults(indLinha, indColuna) = xlRange(indLinha, indColuna).Font.Color
                     Next
                 Next
             PegarCorDaFonte = arResults
            Else
             PegarCorDaFonte = xlRange.Font.Color
            End If
     
    End Function
     
    Function ContarCelulaPorCor(rData As Range, CorCelulaRfe As Range) As Long
            Dim indRefCor As Long
            Dim cellAtual As Range
            Dim cntRes As Long
     
            Application.Volatile
            cntRes = 0
            indRefCor = CorCelulaRfe.Cells(1, 1).Interior.Color
            For Each cellAtual In rData
                    If indRefCor = cellAtual.Interior.Color Then
                            cntRes = cntRes + 1
                    End If
            Next cellAtual
     
            ContarCelulaPorCor = cntRes
    End Function
     
    Function SomarCelulaPorCor(rData As Range, cellRefCor As Range)
            Dim indRefCor As Long
            Dim cellAtual As Range
            Dim sumRes
     
            Application.Volatile
            sumRes = 0
            indRefCor = cellRefCor.Cells(1, 1).Interior.Color
            For Each cellAtual In rData
                    If indRefCor = cellAtual.Interior.Color Then
                            sumRes = WorksheetFunction.Sum(cellAtual, sumRes)
                    End If
            Next cellAtual
     
            SomarCelulaPorCor = sumRes
    End Function
     
    Function ContarCelulaCorFonte(rData As Range, cellRefCor As Range) As Long
            Dim indRefCor As Long
            Dim cellAtual As Range
            Dim cntRes As Long
     
            Application.Volatile
            cntRes = 0
            indRefCor = cellRefCor.Cells(1, 1).Font.Color
            For Each cellAtual In rData
                    If indRefCor = cellAtual.Font.Color Then
                            cntRes = cntRes + 1
                    End If
            Next cellAtual
     
            ContarCelulaCorFonte = cntRes
    End Function
     
    Function SomarCelulaCorFonte(rData As Range, cellRefCor As Range)
            Dim indRefCor As Long
            Dim cellAtual As Range
            Dim sumRes
     
        Application.Volatile
            sumRes = 0
            indRefCor = cellRefCor.Cells(1, 1).Font.Color
            For Each cellAtual In rData
                    If indRefCor = cellAtual.Font.Color Then
                            sumRes = WorksheetFunction.Sum(cellAtual, sumRes)
                    End If
            Next cellAtual
     
            SomarCelulaCorFonte = sumRes
    End Function

4. Salve sua pasta de trabalho como “Pasta de trabalho habilitada para macro do Excel (.xlsm)”.

5.  Escolha a célula onde deseja enviar os resultados e insira a função que acabamos de criar: ContarCelulaPorCor

 = ContarCelulaPorCor (intervalo; código de cor)

Neste exemplo, usamos a fórmula = ContarCelulaPorCor ($F$2: $F$14, A17) onde $F$2: $F$14 é o intervalo contendo células codificadas por cores que se deseja contar e A17 é a célula com uma determinada cor de fundo, vermelha no nosso caso .

De forma semelhante, escrevemos a fórmula para as outras cores que desejamos contar, laranja e verde no caso.

Se tiver dados numéricos em células coloridas (por exemplo, a coluna Quatidade no nosso exemplo), podemos adicionar os valores com base em uma determinada cor usando a função análoga: SomarCelulaPorCor

 = SomarCelulaPorCor (intervalo; código de cor)

Conforme demonstrado acima, usamos a fórmula = SomarCelulaPorCor ($D$2:$D$14; A17) onde $D$2:$D$14 é o intervalo e A17 é a célula com um padrão de cor.

De maneira semelhante, podemos contar células e somar os valores das células pela cor da fonte usando as funções ContarCelulaCorFonte e SomarCelulaCorFonte:

Nota: Se depois de aplicar o código VBA apresentado acima você precisar colorir mais algumas células manualmente, a soma e a contagem das células coloridas não serão recalculadas automaticamente para refletir as alterações.

Como contar e somar células por cor em toda pasta de trabalho

 

O código VBA abaixo conta e soma as células de uma determinada cor em todas as planilhas da pasta de trabalho:

    Function ContarCelulaPorCorNaPlanilha(cellRefCor As Range)
            Dim vWbkRes
            Dim PlanilhaAtual As Worksheet
     
            Application.ScreenUpdating = False
            Application.Calculation = xlCalculationManual
     
            vWbkRes = 0
            For Each PlanilhaAtual In Worksheets
                 PlanilhaAtual.Activate
                 vWbkRes = vWbkRes + ContarCelulaPorCorNaPlanilha(PlanilhaAtual.UsedRange, cellRefCor)
            Next
            Application.ScreenUpdating = True
            Application.Calculation = xlCalculationAutomatic
     
            ContarCelulaPorCorNaPlanilha = vWbkRes
    End Function
     
    Function SomarCelulaPorCorNaPlanilha(cellRefCor As Range)
            Dim vWbkRes
            Dim PlanilhaAtual As Worksheet
     
            Application.ScreenUpdating = False
            Application.Calculation = xlCalculationManual
     
            vWbkRes = 0
            For Each wshCurrent In Worksheets
                 PlanilhaAtual.Activate
                 vWbkRes = vWbkRes + SomarCelulaPorCorNaPlanilha(PlanilhaAtual.UsedRange, cellRefCor)
            Next
            Application.ScreenUpdating = True
            Application.Calculation = xlCalculationAutomatic
     
            SomarCelulaPorCorNaPlanilha = vWbkRes
    End Function

Use essa macro da mesma maneira que usou a anterior e produza a contagem e a soma das células coloridas com a ajuda das seguintes fórmulas, = ContarCelulaPorCorNaPlanilha () e = SomarCelulaPorCorNaPlanilha (). Basta inserir qualquer uma das fórmulas em qualquer célula vazia de qualquer planilha sem definir um intervalo, especificar o endereço de qualquer célula da cor necessária entre colchetes, por exemplo, = SomarCelulaPorCorNaPlanilha (A1), e a fórmula exibirá a soma de todas as células sombreadas com a mesma cor na pasta de trabalho.

Funções personalizadas para obter a cor de fundo de uma célula, cor da fonte e código de cor

Aqui você vai encontrar um resumo de todas as funções que usamos neste exemplo, e outras novas que recuperam códigos de cores.

Observação: lembre-se de que todas essas fórmulas funcionam apenas se você tiver adicionado a função definida pelo usuário à pasta de trabalho do Excel, conforme demonstrado anteriormente neste artigo.

Funções para contar por cor:

  • ContarCelulaPorCor (intervalo; código de cor): conta as células com a cor de fundo especificada. No exemplo acima, usamos a seguinte fórmula para contar células por cor = ContarCelulaPorCor ($F$2:$F$14, A17) onde $F$2:$F$14 é o intervalo selecionado e A17 é a célula com a cor de fundo necessária. Você pode usar todas as outras fórmulas listadas abaixo de maneira semelhante.
  • ContarCelulaCorFonte (intervalo; código de cor) : conta as células com uma cor de fonte específica.

Fórmulas para somar por cor:

  • SomarCelulaPorCor (intervalo; código de cor): calcula a soma das células com uma determinada cor de fundo.
  • SomarCelulaCorFonte (intervalo; código de cor): calcula a soma das célulascom uma cor de fonte específica.

Fórmulas para obter o código de cores:

  • PegarCorDaFonte (cell): retorna o código de cor da cor da fonte de uma célula específica.
  • PegarCorDaCelula (cell): retorna o código de cor da cor de fundo de uma célula específica.

 

Conclusão

Neste artigo vimos como criar funções no Excel, usando VBA, para contar e somar células coloridas, ou com formatação diferenciada.

Caso tenha interesse em aprender mais VBA, nesse link aqui eu escreve sobre o tema.

O site deste pessoal aqui foi referência para este artigo. O site é muitoooo bacana com várias dicas legais para Excel, mas infelizmente o conteúdo está em inglês, o que não deixa de ser uma boa referência para quem conseguir acompanhar. Eu recomendo.

Eu sei que não é comum ler um artigo deste, como tutorial, e repetir para aprender, mas recomendo fortemente que você tome coragem de repetir todo o passo-a-passo. Eu penso que praticar é a melhor maneira de aprender e, embora pareça simples, é preciso se acostumar a navegar entre as telas e fórmulas do Excel para que no futuro você possa se tornar um usuário avançado.

Portanto, continue lendo mais sobre Dicas de Excel aqui.

 

Um comentário sobre “Como Contar e Somar Células por Cor de Fundo no Excel

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *