Jump to content

Ajuda Excel VBA (=ContaCelulaColoridaFormatCond)


julianoR

Recommended Posts

Boa noite amigos;

Preciso da ajuda de alguém que conheça bem sobre VBA, encontrei uma programação que permite criar uma função que conta as células coloridas pela formatação condicional em um determinado intervalo.

=ContaCelulaColoridaFormatCond(A1;B5:Q5)

Onde A1 está com a cor ( verde)

B5:Q5 é o intervalo onde estão os valores.

neste exemplo temos 16 casas no intervalo, cada uma tem uma formula que corresponde a um filtro, se o valor da célula se encaixa na estatistica a célula fica verde, neste caso quero usar a fórmula =ContaCelulaColoridaFormatCond(A1;B5:Q5) para contar quantas células ficaram verdes no intervalo.

Porém quando aplico a fórmula conta apenas 3 casas coloridas, mesmo que as 16 estejam verdes a fórmula conta apenas 3, podem ter 1,4 7,8....

o resultado é apenas 3, preciso descobrir o erro na programação para que a fórmula conte todas as células coloridas pela formatação condicional no intervalo. Minha intenção é descobrir qual combinação de números se encaixa em todos os filtros.

segue abaixo o código VBA completo, caso dê certo compartilho com vcs a planilha depois de pronta.

 

 

 

Option Explicit

 

Public Function ContaCelulaColoridaFormatCond(rngColorInfo As Range, Intervalo As Range) As Long

Dim rConta As Range

   

    For Each rConta In Intervalo.Cells

        If RetornaCorDeFundoCondicional(rConta) = rngColorInfo.Interior.ColorIndex Then

            ContaCelulaColoridaFormatCond = ContaCelulaColoridaFormatCond + 1

        End If

    Next

   

End Function

 

Public Function RetornaCorDeFundoCondicional(ByVal rngCelula As Range) As Long

Dim FormatCondition As FormatCondition

 

    RetornaCorDeFundoCondicional = -1

  

    For Each FormatCondition In rngCelula.FormatConditions

        If StatusDoFormatoCondicional(FormatCondition) Then

            If Not IsNull(FormatCondition.Interior.ColorIndex) Then

                RetornaCorDeFundoCondicional = FormatCondition.Interior.ColorIndex

            End If

            Exit For

        End If

    Next FormatCondition

 

End Function

 

Public Function StatusDoFormatoCondicional(ByVal FormatCondition As FormatCondition) As Boolean

Dim FormulaTransformada As String

Dim Operator As Long

Dim Formula1 As String

Dim Formula2 As String

Dim Cell As Range

Dim CellValue As String

 

Application.Volatile

FormulaTransformada = FormatCondition.Formula1

Set Cell = FormatCondition.Parent

 

On Error Resume Next

Operator = FormatCondition.Operator

On Error GoTo 0

  

   If Operator > 0 Then

      Formula1 = FormatCondition.Formula1

      On Error Resume Next

      If Left(Formula1, 1) = "=" Then Formula1 = Mid(Formula1, 2)

      Formula2 = FormatCondition.Formula2

      On Error GoTo 0

      If Left(Formula2, 1) = "=" Then Formula2 = Mid(Formula2, 2)

      If VarType(Cell.Value) = vbString Then

         CellValue = """" & Cell.Value & """"

      Else

         CellValue = CDbl(Cell.Value)

      End If

      Select Case Operator

         Case xlBetween:      FormulaTransformada = "AND(" & Formula1 & "<=" & CellValue & "," & CellValue & "<=" & Formula2 & ")"

         Case xlNotBetween:   FormulaTransformada = "OR(" & Formula1 & ">" & CellValue & "," & CellValue & ">" & Formula2 & ")"

         Case xlEqual:        FormulaTransformada = CellValue & "=" & Formula1

         Case xlNotEqual:     FormulaTransformada = CellValue & "<>" & Formula1

         Case xlGreater:      FormulaTransformada = CellValue & ">" & Formula1

         Case xlLess:         FormulaTransformada = CellValue & "<" & Formula1

         Case xlGreaterEqual: FormulaTransformada = CellValue & ">=" & Formula1

         Case xlLessEqual:    FormulaTransformada = CellValue & "<=" & Formula1

      End Select

   Else

      'Caso a formatação condicional seja uma fórmula

      FormulaTransformada = FormatCondition.Formula1

      FormulaTransformada = Replace(FormulaTransformada, ";", ",")

     

      'Traduzindo a função SE para o inglês

      FormulaTransformada = Replace(FormulaTransformada, "SE(", "IF(")

     

      'Adicione traduções para as funções que você usar

      'Exemplos:

      'FormulaTransformada = Replace(FormulaTransformada, "MÉDIA(", "AVG(")

      'FormulaTransformada = Replace(FormulaTransformada, "SOMA(", "SUM(")

      'FormulaTransformada = Replace(FormulaTransformada, "SOMASE(", "SUMIF(")

     

      FormulaTransformada = Application.ConvertFormula(FormulaTransformada, xlA1, xlR1C1, xlRelative, FormatCondition.AppliesTo.Resize(1, 1))

      FormulaTransformada = Application.ConvertFormula(FormulaTransformada, xlR1C1, xlA1, xlRelative, Cell)

   End If

   StatusDoFormatoCondicional = Application.Evaluate(FormulaTransformada)

 

End Function

 

Att;

Juliano.

Edited by julianoR
Link to comment
Share on other sites

Guest Zangado

cara é mais facil se definir uma macro para a condição que se precisa

formatação condicional está em um plano que o vba não tem acesso e não tem como definir possibilidade de formulas de todo tipo de formatação condicional,

 

no nicio eu tentei de  tudo  mas não eram cosas praticas

e vc postou na area errada, o forum tem uma area somente para excel

Edited by Zangado
Link to comment
Share on other sites

Obrigado amigo, é exatamente isso que eu quero, porém neste caso a contagem está na vertical e na minha fórmula a contagem está dando errada na horizontal, o problema é um pequeno erro na formação do código VBA,mas não estou conseguindo achar, mas de qualquer forma muito obrigado.

Att;

Juliano.

Link to comment
Share on other sites

Em 17/04/2017 at 23:25, edcronos2 disse:

cara é mais facil se definir uma macro para a condição que se precisa

formatação condicional está em um plano que o vba não tem acesso e não tem como definir possibilidade de formulas de todo tipo de formatação condicional,

 

no nicio eu tentei de  tudo  mas não eram cosas praticas

e vc postou na area errada, o forum tem uma area somente para excel

Ah certo não prestei atenção que tinha postado na área errada, quanto a fórmula, o que preciso é justamente definir na minha programação o formato de fórmula para contagem, preciso saber como escrever em linguagem vba que a célula que quero contar a formatação condicional contem a fórmula está entre dois valores. ( ESTÁ ENTRE )

Att;

Juliano

Link to comment
Share on other sites

Guest Zangado
13 minutos atrás, julianoR disse:

Ah certo não prestei atenção que tinha postado na área errada, quanto a fórmula, o que preciso é justamente definir na minha programação o formato de fórmula para contagem, preciso saber como escrever em linguagem vba que a célula que quero contar a formatação condicional contem a fórmula está entre dois valores. ( ESTÁ ENTRE )

Att;

Juliano

como falei , é mais facil ir direto para a comparação dos proprios valores

tipo, a formatação condicional tem uma regra, então se usa esa regra diretamente no vba ou na formula na planilha

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...