Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por jules251 09 Mai 2017 às 18:39
Membro Novato
Mensagens: 4
Reputação: 0
#22970
Boa tarde!

No meu estágio trabalho com planilhas que assumem cores de fundo diferentes conforme o valor resultante da célula.

Preciso contar quantas células há de cada cor, por exemplo quantas células cor de rosa, quantas verdes, quantas amarelas, etc.

Já encontrei fórmulas de VBA na internet para isso, mas nenhuma funcionou no meu caso por dois motivos:

- A cor de fundo da célula é resultante de uma formatação condicional; (depois de pesquisar achei uma fórmula que funciona nesse caso)

- O valor da célula é resultante de uma operação envolvendo outras células (ESSE é o meu problema, pois não acho fórmulas que funcionam neste caso; vi na internet outras pessoas com o mesmo problema e OU elas não encontraram solução OU a pessoa esclarecendo as duvidas resolveu o problema por e-mail, ou seja, não divulgou as fórmulas).

Não sei se consegui deixar claro, então explicando:

Os valores abaixo de 45 pintam a célula de verde
Os valores entre 45 e 90-beta pintam a célula de amarelo ==> aqui está o problema, para gerar esse resultado é feita uma subtração de uma célula com outra, que representa beta. Assim o programa não roda.
Os valores acima de 90-beta pintam a célula de vermelho ==> idem.

Ou seja, preciso de uma função de VBA que conte as cores das células e que funcione com células formatadas pela formatação condicional E cujo resultado seja derivado da operação com outras células.


Alguém consegue me ajudar? :?
Avatar do usuário
Por FelipeMGarcia 09 Mai 2017 às 18:52
Excel Expert
Mensagens: 3629
Reputação: 1540
#22972
Veja se esse anexo te ajuda.

Abs
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 09 Mai 2017 às 18:59
Membro 5 Estrelas
Mensagens: 1209
Reputação: 598
#22973
Experimente:

Código: Selecionar todosSub ContaPelaCor()
 Dim azul As Long, verde As Long, r As Range
  For Each r In Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)
   If r.DisplayFormat.Interior.ColorIndex = 33 Then
    azul = azul + 1
   ElseIf r.DisplayFormat.Interior.ColorIndex = 43 Then
    verde = verde + 1
   End If
  Next r
 MsgBox "azul >> " & azul & vbLf & "verde >> " & verde
End Sub


para saber o número referente à cor da célula:
Código: Selecionar todosSub CorDePreenchimento()
     MsgBox ActiveCell.DisplayFormat.Interior.ColorIndex
End Sub


Se você não conseguir sugiro que você disponibilize uma amostra do seu arquivo, com alguns dados e com o resultado esperado.

obs. opcionalmente você pode contar as células utilizando critérios iguais aos utilizados na FC, em lugar de contar pela cor
Editado pela última vez por osvaldomp em 12 Mai 2017 às 15:45, em um total de 1 vez.
Por jules251 12 Mai 2017 às 13:39
Membro Novato
Mensagens: 4
Reputação: 0
#23106
Muito obrigada pelas respostas.

Tentei as duas sugestões e não deu certo, talvez porque ainda sou muito leiga e não compreendo o VBA completamente.

Segui a sugestão de upar um arquivo para que o meu problema seja mais fácil de visualizar (e tomara) resolver. Preciso contar a quantidade de células de cada cor (verde, vermelho e amarelo) nas duas últimas abas.

Desde agora fico muito agradecida pela ajuda ;)
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 12 Mai 2017 às 16:09
Membro 5 Estrelas
Mensagens: 1209
Reputação: 598
#23111
Considerando o intervalo 'F3:F12' da planilha "Alfa":

contar células verdes
Código: Selecionar todos =CONT.SE(F3:F12;"<45")

contar células amarelas
Código: Selecionar todos=SOMARPRODUTO((F3:F12>=45)*(F3:F12<=E3:E12))

contar células cinza
Código: Selecionar todos =CONT.SE(F3:F12;"-")

contar células vermelhas
Código: Selecionar todos =SOMARPRODUTO(--(F3:F12>E3:E12)*(F3:F12<>"-"))
Por osvaldomp 12 Mai 2017 às 16:49
Membro 5 Estrelas
Mensagens: 1209
Reputação: 598
#23112
Sugestão - no intervalo 'F3:F12' da planilha "Alfa" você aplicou 4 regras de Formatação Condicional em cada uma das 10 células daquele intervalo, o que resultou em 40 regras :o ; é possível aplicar as 4 regras para todo o intervalo, assim: selecione 'F3:F12' / Formatação Condicional / Limpar Regras das Células Selecionadas / Formatação Condicional / Nova Regra

para todas as regras clique em Usar uma fórmula para determinar ... e na caixa de fórmula cole as fórmulas conforme abaixo:
verde
=$F3<45

amarelo
=E($F3>=45;$F3<=$E3)

cinza
=$F3="-"

vermelho
=E($F3>$E3;$F3<>"-")