Notifications
Clear all

Verificar se formatação condicional está ativa na célula

9 Posts
3 Usuários
0 Reactions
1,364 Visualizações
(@laryssa)
Posts: 0
New Member
Topic starter
 

Ola,

Estou usando na formatação condicional uma formula para que, caso se aplique, a célula fique em vermelho.
Como possuo mais de 20000 linhas e varias colunas onde a formatação condicional está sendo aplicada, preciso em uma nova coluna receber o valor VERDADEIRO caso uma das células daquela linha tenha sido pintada de vermelho pela formatação condicional. Ou seja, preciso criar uma função que retorne VERDADEIRO ou FALSO ao verificar dentro do range se a formatação foi aplicada nas células.

Já tentei criar uma função que verificasse se a cor interior é a que eu quero, mas ele considera a formatação condicional em todas as células, mesmo naquelas em que não foram aplicadas a cor.

Muito obrigada!!

 
Postado : 20/05/2016 8:55 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Qual a fórmula que você utiliza na FC ?

 
Postado : 20/05/2016 11:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Isso não te ajuda em nada?

Sub CodigoDaCorDaCelulaAtiva()
On Error GoTo myErr
Sheets("Plan1").Select
ActiveCell.Select
    If Selection.FormatConditions.Item(1).Interior.Color <> 0 Then
        MsgBox "Esta célua está com formatação condicional ""Cor:"" " & _
        Selection.FormatConditions.Item(1).Interior.Color
    End If
myErr:
End Sub
'Ou use conforme fonte abaixo
'http://www.get-digital-help.com/2013/10/02/counting-conditionally-formatted-cells-vba/
Function CountCFCells(rng As Range, c As Range)
Dim i As Single, j As Long, k As Long
Dim chk As Boolean, Str1 As String, CFCELL As Range
chk = False
For i = 1 To rng.FormatConditions.Count
    If rng.FormatConditions(i).Interior.ColorIndex = c.Interior.ColorIndex Then
        chk = True
        Exit For
    End If
Next i
j = 0
k = 0
If chk = True Then
    For Each CFCELL In rng
        Str1 = CFCELL.FormatConditions(i).Formula1
        Str1 = Application.ConvertFormula(Str1, xlA1, xlR1C1)
        Str1 = Application.ConvertFormula(Str1, xlR1C1, xlA1, , ActiveCell.Resize(rng.Rows.Count, rng.Columns.Count).Cells(k + 1))
        If Evaluate(Str1) = True Then j = j + 1
        k = k + 1
    Next CFCELL
Else
CountCFCells = "Color not found"
Exit Function
End If
CountCFCells = j
End Function

Att

 
Postado : 20/05/2016 11:41 am
(@laryssa)
Posts: 0
New Member
Topic starter
 

Qual a fórmula que você utiliza na FC ?

Oi Osvaldomp,

to usando: =AND($H2<>"Result";$H1<>"Result";I2<>0;OR(I2/I1<$X$2;I2/I1>$X$3))

Basicamente essa formula verifica se o valor da célula divida pela célula de cima é maior que 300% ou menor que 3%.
Só que essas porcentagens eu entro na célula X2 e X3 e precisam ser flexíveis, por isso a referência na formula às células.

 
Postado : 23/05/2016 6:32 am
(@laryssa)
Posts: 0
New Member
Topic starter
 

Boa tarde!!

Isso não te ajuda em nada?

Sub CodigoDaCorDaCelulaAtiva()
On Error GoTo myErr
Sheets("Plan1").Select
ActiveCell.Select
    If Selection.FormatConditions.Item(1).Interior.Color <> 0 Then
        MsgBox "Esta célua está com formatação condicional ""Cor:"" " & _
        Selection.FormatConditions.Item(1).Interior.Color
    End If
myErr:
End Sub
'Ou use conforme fonte abaixo
'http://www.get-digital-help.com/2013/10/02/counting-conditionally-formatted-cells-vba/
Function CountCFCells(rng As Range, c As Range)
Dim i As Single, j As Long, k As Long
Dim chk As Boolean, Str1 As String, CFCELL As Range
chk = False
For i = 1 To rng.FormatConditions.Count
    If rng.FormatConditions(i).Interior.ColorIndex = c.Interior.ColorIndex Then
        chk = True
        Exit For
    End If
Next i
j = 0
k = 0
If chk = True Then
    For Each CFCELL In rng
        Str1 = CFCELL.FormatConditions(i).Formula1
        Str1 = Application.ConvertFormula(Str1, xlA1, xlR1C1)
        Str1 = Application.ConvertFormula(Str1, xlR1C1, xlA1, , ActiveCell.Resize(rng.Rows.Count, rng.Columns.Count).Cells(k + 1))
        If Evaluate(Str1) = True Then j = j + 1
        k = k + 1
    Next CFCELL
Else
CountCFCells = "Color not found"
Exit Function
End If
CountCFCells = j
End Function

Att

Olá Alexandre, o primeiro código nao se aplica ao que preciso pq toda vez precisarei selecionar o que quero para executar a funcao certo?

Já o segundo, acho que seria isso mesmo, só que tá dando o erro #VALUE!

 
Postado : 23/05/2016 6:35 am
(@laryssa)
Posts: 0
New Member
Topic starter
 

Alexandre, quando eu pinto a célula de referencia também com Formatação condicional não dá erro mas cai no "Color not found" da função.

 
Postado : 23/05/2016 6:43 am
(@laryssa)
Posts: 0
New Member
Topic starter
 

Eu editei o código para o código abaixo e "está dando certo".
O problema é que mesmo quando a célula nao está pintada ele considera como se estivesse pq tem formatacao condicional.
Nao tem um jeito dele verificar se a formatacao condicional foi aplicada?

Function CheckColor(rng As Range, colorcell As Range)
Dim i As Single
Dim chk As Boolean



chk = False
For i = 1 To rng.FormatConditions.Count
    If rng.FormatConditions(i).Interior.ColorIndex = colorcell.Interior.ColorIndex Then
    
    MsgBox "colorcell " & colorcell.Interior.ColorIndex
    MsgBox " cor do interior " & rng.FormatConditions(i).Interior.ColorIndex
           
        chk = True
        Exit For
    End If
Next i

CheckColor = chk

End Function
 
Postado : 23/05/2016 7:01 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Neste site tem uma função que verifica se tem formatação condicional ou não.
http://www.cpearson.com/excel/cfcolors.htm

ActiveCondition
This function will return the number of the condition that is currently applied to the cell. If the cell does not have any conditional formatting defined, or none of the conditional formats are currently applied, it returns 0. Otherwise, it returns 1, 2, or 3, indicating with format condition is in effect. ActiveCondition requires the GetStrippedValue function at the bottom of this page.

Lembre se de copiar as funções necessárias para uma única função funcionar.

ActiveCondition requires the GetStrippedValue function at the bottom of this page.

Imagine que tem em uma coluna células coloridas (usando o preenchimento manual), células com formatação condicional, após aplicar a função ActiveCondition , ela vai retornar zero se houver cor de fundo das células, e outros para formatação condicional e por ai vai...

Att

 
Postado : 23/05/2016 7:37 am
(@osvaldomp)
Posts: 857
Prominent Member
 

... preciso em uma nova coluna receber o valor VERDADEIRO caso uma das células daquela linha tenha sido pintada de vermelho pela formatação condicional. Ou seja, preciso criar uma função que retorne VERDADEIRO ou FALSO ao verificar dentro do range se a formatação foi aplicada nas células.

Tentou utilizar na nova coluna a fórmula que é aplicada na FC ?
Experimente colar a fórmula na linha 2 e arrastar para baixo.

=AND($H2<>"Result",$H1<>"Result",$I2<>0,OR($I2/$I1<$X$2,$I2/$I1>$X$3))

obs. se você quiser é possível obter os resultados via macro

 
Postado : 23/05/2016 7:54 am