none
Uma macro para formatar? RRS feed

  • 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.

    sábado, 9 de fevereiro de 2013 13:33

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
    sábado, 9 de fevereiro de 2013 20:31

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

    sábado, 9 de fevereiro de 2013 17:47
  • 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 If

    Só 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
    sábado, 9 de fevereiro de 2013 18:54
  • 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

    sábado, 9 de fevereiro de 2013 19:05
  • 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
    sábado, 9 de fevereiro de 2013 20:11
  • 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
    sábado, 9 de fevereiro de 2013 20:31
  • 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
    sábado, 9 de fevereiro de 2013 20:37