Usuário com melhor resposta
Uma macro para formatar?

Pergunta
-
Preciso de uma macro que formate o valor de todas as células que contém valores numéricos em uma planilha da seguinte forma:
Se a célula contém valor acima de cinco, a cor da fonte deve ser azul.
Se a célula contém valor abaixo de cinco, a cor da fonte deve ser vermelha.
Respostas
-
Diniz,
já que você prefere não usar a formatação condicional (que é dinâmica e pode ser aplicada diretamente a um intervalo), você pode usar algo tipo esse exemplo agora:
For Each celula In Plan1.Range("A1", Plan1.UsedRange) If IsNumeric(celula) Then If celula.Value < 5 Then celula.Font.ColorIndex = 3 Else celula.Font.ColorIndex = 5 End If End If Next celula
Você pode facilmente adaptá-lo às suas necessidades.
Dessa forma resolve?
Filipe Magno
- Marcado como Resposta diniz488 sábado, 9 de fevereiro de 2013 20:43
Todas as Respostas
-
Boa tarde Diniz.
A melhor forma de fazer isso é usar a Formatação Condicional. Minha sugestão inicial é o pequeno código:
Sub Formatar() Intervalo = "A1:A5" Range(Intervalo).Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=5" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority Selection.FormatConditions(1).Font.ColorIndex = 3 '3: vermelho Selection.FormatConditions(1).StopIfTrue = True 'True para compatibilidade com Excel 2003 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=5" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority Selection.FormatConditions(1).Font.ColorIndex = 5 '5: azul Selection.FormatConditions(1).StopIfTrue = True End Sub
Você pode utilizar muitas outras variações através do recurso Gravar Macro, que é muito útil nesses casos.
Obs.: a linha 'SetFirstPriority' é opcional.
Espero que ajude.
Filipe Magno
-
E se eu não souber, de antemão, qual é o intervalo?
Já fiz esta parte do código:
If celula.Value >= 5 Then
celula.Forecolor = RGB(0, 0, 255)
Else
celula.Forecolor = RGB(255, 0, 0)
End IfSó não estou conseguindo fazer o laço de repetição e a declaração do objeto celula, para valer para todas as células da planilha. E também preciso verificar se o conteúdo da célula é numérico.
- Editado diniz488 sábado, 9 de fevereiro de 2013 19:08
-
Bom, dessa forma você ao menos precisa saber qual o critério para se escolher o intervalo. Por exemplo, aplicar a todo o intervalo com dados na planilha (UsedRange):
Plan1.Range("A1", Plan1.UsedRange).Select 'Opção 1 Plan1.UsedRange.Select 'Opção 2
Ou talvez definir apenas as colunas desejadas...
Alguma regra você precisa ter para aplicar a formatação. Talvez se você for mais específico...
Abraço.
Filipe Magno
-
Agora dentro do usedrange,
Só não estou conseguindo fazer o laço de repetição e a declaração do objeto celula, para valer para o intervalo de células usadas da planilha. E também preciso verificar se o conteúdo da célula é numérico.
- Editado diniz488 sábado, 9 de fevereiro de 2013 20:13
-
Diniz,
já que você prefere não usar a formatação condicional (que é dinâmica e pode ser aplicada diretamente a um intervalo), você pode usar algo tipo esse exemplo agora:
For Each celula In Plan1.Range("A1", Plan1.UsedRange) If IsNumeric(celula) Then If celula.Value < 5 Then celula.Font.ColorIndex = 3 Else celula.Font.ColorIndex = 5 End If End If Next celula
Você pode facilmente adaptá-lo às suas necessidades.
Dessa forma resolve?
Filipe Magno
- Marcado como Resposta diniz488 sábado, 9 de fevereiro de 2013 20:43
-
Está formatando os dados não numéricos em vermelho.
Precisei fazer uma adaptação:
Sub formatar()
For Each celula In Plan1.UsedRange
If IsNumeric(celula) Then
If celula.Value < 5 Then
celula.Font.ColorIndex = 3
Else
celula.Font.ColorIndex = 5
End If
Else
celula.Font.ColorIndex = 1
End If
Next celula
End Sub
- Editado diniz488 sábado, 9 de fevereiro de 2013 20:59