Formatação condicional do VBA - Aplicar formato condicional usando VBA Excel

Formatação condicional em Excel VBA

Podemos aplicar a formatação condicional a uma célula ou intervalo de células no Excel. Um formato condicional é um formato que é aplicado apenas a células que atendem a certos critérios, digamos, valores acima de um determinado valor, valores positivos ou negativos ou valores com uma fórmula específica, etc. Essa formatação condicional também pode ser feita na programação VBA do Excel usando a ' Coleção de condições de formato ' na macro / procedimento.

A condição de formato é usada para representar um formato condicional que pode ser definido chamando um método que retorna uma variável desse tipo. Ele contém todos os formatos condicionais para um único intervalo e pode conter apenas três condições de formato.

FormatConditions.Add / Modify / Delete é usado no VBA para adicionar / modificar / excluir objetos FormatCondition à coleção. Cada formato é representado por um objeto FormatCondition. FormatConditions é uma propriedade do objeto Range e adicione os seguintes parâmetros com a sintaxe abaixo:

FormatConditions.Add (Type, Operator, Formula1, Formula2) 

A sintaxe da fórmula Adicionar tem os seguintes argumentos:

  • Tipo: obrigatório, representa se o formato condicional é baseado no valor presente na célula ou em uma expressão.
  • Operador: Opcional, representa o operador a ser usado com um valor quando 'Tipo' é baseado no valor da célula.
  • Fórmula1: Opcional, representa o valor ou expressão associada ao formato condicional.
  • Fórmula2: Opcional, representa o valor ou expressão associada à segunda parte do formato condicional quando o parâmetro: 'Operador' é 'xlBetween' ou 'xlNotBetween'.

FormatConditions.Modify também tem a mesma sintaxe de FormatConditions.Add.

A seguir está a lista de alguns valores / enumeração que podem ser obtidos por alguns parâmetros de 'Adicionar' / 'Modificar':

Exemplos de formatação condicional VBA

Abaixo estão os exemplos de formatação condicional no Excel VBA.

Exemplo 1

Digamos que temos um arquivo Excel contendo o nome e as marcas de alguns alunos e desejamos determinar / destacar as marcas como negrito e azul, que é maior que 80, e negrito e vermelho, que é menor que 50. Vamos ver os dados contidos no arquivo:

Usamos FormatConditions.Add a função conforme abaixo para fazer isso:

  • Vá para Desenvolvedor -> Editor Visual Basic:
  • Clique com o botão direito no nome da pasta de trabalho no painel 'Projeto-VBAProject' -> 'Inserir' -> 'Módulo'.
  • Agora escreva o código / procedimento neste módulo:

Código:

Sub formatação () End Sub
  • Defina a variável rng, condição1, condição2:

Código:

Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition End Sub
  • Defina / fixe o intervalo no qual a formatação condicional deve ser desejada usando a função 'Faixa' do VBA:

Código:

Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition Definir rng = Range ("B2", "B11") End Sub
  • Exclua / limpe qualquer formatação condicional existente (se houver) do intervalo, usando 'FormatConditions.Delete':

Código:

Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition Set rng = Range ("B2", "B11") rng.FormatConditions.Delete End Sub
  • Agora defina e defina os critérios para cada formato condicional, usando 'FormatConditions.Add':

Código:

Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition Defina rng = Range ("B2", "B11") rng.FormatConditions.Delete Defina a condição1 = rng.FormatConditions.Add (xlCellValue, xlGreater, "= 80 ") Defina condition2 = rng.FormatConditions.Add (xlCellValue, xlLess," = 50 ") End Sub
  • Defina e defina o formato a ser aplicado para cada condição

Copie e cole este código em seu módulo de classe VBA.

Código:

Sub formatting() 'Definining the variables: Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition 'Fixing/Setting the range on which conditional formatting is to be desired Set rng = Range("B2", "B11") 'To delete/clear any existing conditional formatting from the range rng.FormatConditions.Delete 'Defining and setting the criteria for each conditional format Set condition1 = rng.FormatConditions.Add(xlCellValue, xlGreater, "=80") Set condition2 = rng.FormatConditions.Add(xlCellValue, xlLess, "=50") 'Defining and setting the format to be applied for each condition With condition1 .Font.Color = vbBlue .Font.Bold = True End With With condition2 .Font.Color = vbRed .Font.Bold = True End With End Sub

Agora, quando executamos este código usando a tecla F5 ou manualmente, vemos que as marcas menores que 50 são destacadas em negrito e vermelho, enquanto aquelas maiores que 80 são destacadas em negrito e azul da seguinte maneira:

Observação: algumas das propriedades para a aparência de células formatadas que podem ser usadas com FormatCondition são:

Exemplo # 2

Digamos que no exemplo acima tenhamos outra coluna também que afirma que o aluno é um 'Topper' se ele / ela obtiver mais de 80 pontos, caso contrário, Aprovado / Reprovado contra eles. Agora queremos destacar os valores indicados como 'Topper' como Negrito e Azul. Vamos ver os dados contidos no arquivo:

Nesse caso, o código / procedimento funcionaria da seguinte maneira:

Código:

Sub TextFormatting () End Sub

Defina e defina o formato a ser aplicado para cada condição

Código:

Sub TextFormatting () With Range ("c2: c11"). FormatConditions.Add (xlTextString, TextOperator: = xlContains, String: = "topper") With .Font .Bold = True .Color = vbBlue End With End With End Sub

Podemos ver no código acima que desejamos testar se o intervalo: 'C2: C11 ”contém a string:“ Topper ”, então o parâmetro:“ Onamestor ”de' Format.Add 'leva a enumeração:” Xcontains ”para teste esta condição no intervalo fixo (ou seja, C2: C11) e, em seguida, faça a formatação condicional necessária (alterações de fonte) neste intervalo.

Agora, quando executamos este código manualmente ou pressionando a tecla F5, vemos que os valores das células com 'Topper' são destacados em azul e em negrito:

Nota: Então, vimos nos dois exemplos acima como o método 'Adicionar' funciona no caso de qualquer critério de valor de célula (numérico ou string de texto).

Below are some other instances/criteria that can be used to test and thus apply VBA conditional formatting on:

  • Format by Time Period
  • Average condition
  • Colour Scale condition
  • IconSet condition
  • Databar condition
  • Unique Values
  • Duplicate Values
  • Top10 values
  • Percentile Condition
  • Blanks Condition, etc.

With different conditions to be tested, different values/enumeration are taken by parameters of ‘Add.’

Things to Remember About VBA Conditional Formatting

  • ‘Add’ method with ‘FormatConditions’ is used to create a new conditional format, ’Delete’ method to delete any conditional format, and ‘Modify’ method to alter any existing conditional format.
  • The ‘Add’ method with ‘FormatConditions Collection’ fails if more than three conditional formats are created for a single range.
  • Para aplicar mais de três formatos condicionais a um intervalo usando o método 'Adicionar', podemos usar 'If' ou 'selecionar caso'.
  • Se o método 'Add' tiver o parâmetro 'Type' como: 'xlExpression', o parâmetro 'Operator' será ignorado.
  • Os parâmetros: 'Fórmula1' e 'Fórmula2' no método 'Adicionar' podem ser uma referência de célula, valor constante, valor de string ou mesmo uma fórmula.
  • O parâmetro: 'Formula2' é usado apenas quando o parâmetro: 'Operador' é 'xlBetween' ou 'xlNotBetween', caso contrário, será ignorado.
  • Para remover toda a formatação condicional de qualquer planilha, podemos usar o método 'Delete' da seguinte maneira:
Cells.FormatConditions.Delete

Artigos interessantes...