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!!
Qual a fórmula que você utiliza na FC ?
Osvaldo
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
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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.
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 FunctionAtt
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!
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.
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
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
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
... 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
Osvaldo