julianoR Posted April 18, 2017 Share Posted April 18, 2017 (edited) 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 April 18, 2017 by julianoR Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted April 18, 2017 Share Posted April 18, 2017 (edited) 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 April 18, 2017 by Zangado Quote Link to comment Share on other sites More sharing options...
cerealkiller Posted April 18, 2017 Share Posted April 18, 2017 @julianoR Veja se isto te ajuda, http://www.exceldoseujeito.com.br/2008/11/21/contar-celulas-coloridas/ ou http://www.exceldoseujeito.com.br/2010/07/03/contar-celulas-coloridas-pela-formatacao-condicional/ Quote Link to comment Share on other sites More sharing options...
julianoR Posted April 19, 2017 Author Share Posted April 19, 2017 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. Quote Link to comment Share on other sites More sharing options...
julianoR Posted April 19, 2017 Author Share Posted April 19, 2017 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 Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted April 19, 2017 Share Posted April 19, 2017 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.