Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Formatação com VBA | Trabalhando com Dados do Excel
VBA do Excel para Automação Empresarial

Formatação com VBA

Deslize para mostrar o menu

Tudo o que pode ser formatado manualmente no Excel, também pode ser formatado por código.

Fontes

With é uma forma abreviada de se referir ao mesmo objeto várias vezes seguidas sem precisar digitar seu nome completo em cada linha. With obj ... End With significa simplesmente que toda linha dentro desse bloco que começa com um ponto (como .Property = X) é uma abreviação para obj.Property = X — o VBA preenche automaticamente obj para cada uma. É apenas uma conveniência para facilitar a leitura; não altera o funcionamento do código.

' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)

' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
    .Bold = True
    .Size = 11
    .Color = RGB(255, 255, 255)
    .Name = "Calibri"
End With

Ambas as versões fazem exatamente a mesma coisa — With apenas evita repetir ws.Range("A1:I1").Font três vezes.

Cores

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Bordas

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Alinhamento

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Noções básicas de formatação condicional

O VBA pode aplicar as mesmas regras que você criaria pela faixa de opções:

Dim rng As Range
Set rng = ws.Range("I2:I6")     ' Status column
 
rng.FormatConditions.Delete     ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
    TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Figura 3.4

Execute este código e todo pedido com status "Cancelled" recebe automaticamente um destaque em tom avermelhado — e, diferente da formatação manual, a regra permanece ativa caso o valor de Status seja alterado posteriormente.

Tarefa

  1. Negrito na linha de cabeçalho (A1:I1), preenchimento verde escuro (RGB(24, 106, 60)) e fonte branca (RGB(255, 255, 255)) — tudo via código, não manualmente.
  2. Adicionar bordas finas cinza (RGB(200, 200, 200)) ao redor de toda a tabela usando CurrentRegion.
  3. Adicionar uma formatação condicional que destaque qualquer pedido com Discount % >= 10 em amarelo (RGB(255, 235, 156)).
Dica
expand arrow

1. Formatação da linha de cabeçalho

  • Font.Bold, Interior.Color e Font.Color podem ser definidos no mesmo intervalo.
  • O preenchimento verde escuro exige um triplo RGB; fonte branca é o valor RGB mais simples possível.
  • Um bloco With...End With evita repetir ws.Range("A1:I1") três vezes.

2. Adicionando bordas com CurrentRegion

  • CurrentRegion em A1 seleciona toda a tabela sem precisar saber ou fixar quantas linhas existem.
  • Bordas possuem três propriedades a serem definidas juntas: LineStyle, Weight e Color — cinza fino significa xlThin e um valor RGB cinza claro.

3. Formatação condicional para Discount % >= 10

  • Trata-se de uma comparação numérica, não textual, então o tipo de condição é xlCellValue com xlGreaterEqual — diferente do exemplo de texto “Cancelled” mostrado anteriormente no capítulo.
  • O detalhe importante: Discount % é armazenado como decimal (10% = 0,1), então o valor de comparação em Formula1 deve ser "0.1", não "10".
  • Sempre limpe as formatações condicionais existentes nesse intervalo antes, ou execuções repetidas da macro acumularão regras duplicadas.
Solução
expand arrow
Sub FormatOrdersTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Header row formatting ---
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(24, 106, 60)
        .Font.Color = RGB(255, 255, 255)
    End With

    ' --- 2. Borders around the full table ---
    With ws.Range("A1").CurrentRegion.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(200, 200, 200)
    End With

    ' --- 3. Conditional format for Discount % >= 10 ---
    Dim discountRange As Range
    Set discountRange = ws.Range("G2:G6")

    discountRange.FormatConditions.Delete
    discountRange.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreaterEqual, Formula1:="0.1"
    discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Formatação com VBA

Tudo o que pode ser formatado manualmente no Excel, também pode ser formatado por código.

Fontes

With é uma forma abreviada de se referir ao mesmo objeto várias vezes seguidas sem precisar digitar seu nome completo em cada linha. With obj ... End With significa simplesmente que toda linha dentro desse bloco que começa com um ponto (como .Property = X) é uma abreviação para obj.Property = X — o VBA preenche automaticamente obj para cada uma. É apenas uma conveniência para facilitar a leitura; não altera o funcionamento do código.

' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)

' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
    .Bold = True
    .Size = 11
    .Color = RGB(255, 255, 255)
    .Name = "Calibri"
End With

Ambas as versões fazem exatamente a mesma coisa — With apenas evita repetir ws.Range("A1:I1").Font três vezes.

Cores

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Bordas

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Alinhamento

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Noções básicas de formatação condicional

O VBA pode aplicar as mesmas regras que você criaria pela faixa de opções:

Dim rng As Range
Set rng = ws.Range("I2:I6")     ' Status column
 
rng.FormatConditions.Delete     ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
    TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Figura 3.4

Execute este código e todo pedido com status "Cancelled" recebe automaticamente um destaque em tom avermelhado — e, diferente da formatação manual, a regra permanece ativa caso o valor de Status seja alterado posteriormente.

Tarefa

  1. Negrito na linha de cabeçalho (A1:I1), preenchimento verde escuro (RGB(24, 106, 60)) e fonte branca (RGB(255, 255, 255)) — tudo via código, não manualmente.
  2. Adicionar bordas finas cinza (RGB(200, 200, 200)) ao redor de toda a tabela usando CurrentRegion.
  3. Adicionar uma formatação condicional que destaque qualquer pedido com Discount % >= 10 em amarelo (RGB(255, 235, 156)).
Dica
expand arrow

1. Formatação da linha de cabeçalho

  • Font.Bold, Interior.Color e Font.Color podem ser definidos no mesmo intervalo.
  • O preenchimento verde escuro exige um triplo RGB; fonte branca é o valor RGB mais simples possível.
  • Um bloco With...End With evita repetir ws.Range("A1:I1") três vezes.

2. Adicionando bordas com CurrentRegion

  • CurrentRegion em A1 seleciona toda a tabela sem precisar saber ou fixar quantas linhas existem.
  • Bordas possuem três propriedades a serem definidas juntas: LineStyle, Weight e Color — cinza fino significa xlThin e um valor RGB cinza claro.

3. Formatação condicional para Discount % >= 10

  • Trata-se de uma comparação numérica, não textual, então o tipo de condição é xlCellValue com xlGreaterEqual — diferente do exemplo de texto “Cancelled” mostrado anteriormente no capítulo.
  • O detalhe importante: Discount % é armazenado como decimal (10% = 0,1), então o valor de comparação em Formula1 deve ser "0.1", não "10".
  • Sempre limpe as formatações condicionais existentes nesse intervalo antes, ou execuções repetidas da macro acumularão regras duplicadas.
Solução
expand arrow
Sub FormatOrdersTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Header row formatting ---
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(24, 106, 60)
        .Font.Color = RGB(255, 255, 255)
    End With

    ' --- 2. Borders around the full table ---
    With ws.Range("A1").CurrentRegion.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(200, 200, 200)
    End With

    ' --- 3. Conditional format for Discount % >= 10 ---
    Dim discountRange As Range
    Set discountRange = ws.Range("G2:G6")

    discountRange.FormatConditions.Delete
    discountRange.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreaterEqual, Formula1:="0.1"
    discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 4
some-alt