Formato condicional de VBA - Aplicar formato condicional usando VBA Excel

Formato condicional en Excel VBA

Podemos aplicar formato condicional a una celda o rango de celdas en Excel. Un formato condicional es un formato que se aplica solo a las celdas que cumplen con ciertos criterios, digamos valores por encima de un valor particular, valores positivos o negativos, o valores con una fórmula en particular, etc. la ' Colección de condiciones de formato ' en la macro / procedimiento.

La condición de formato se utiliza para representar un formato condicional que se puede establecer llamando a un método que devuelve una variable de ese tipo. Contiene todos los formatos condicionales para un solo rango y solo puede contener tres condiciones de formato.

FormatConditions.Add / Modify / Delete se usa en VBA para agregar / modificar / eliminar objetos FormatCondition a la colección. Cada formato está representado por un objeto FormatCondition. FormatConditions es una propiedad del objeto Range y agrega los siguientes parámetros con la siguiente sintaxis:

FormatConditions.Add (Tipo, Operador, Fórmula1, Fórmula2) 

La sintaxis de la fórmula Add tiene los siguientes argumentos:

  • Tipo: obligatorio, representa si el formato condicional se basa en el valor presente en la celda o en una expresión.
  • Operador: Opcional, representa el operador que se utilizará con un valor cuando 'Tipo' se basa en el valor de la celda.
  • Fórmula1: Opcional, representa el valor o la expresión asociada con el formato condicional.
  • Formula2: Opcional, representa el valor o la expresión asociada con la segunda parte del formato condicional cuando el parámetro: 'Operador' es 'xlBetween' o 'xlNotBetween'.

FormatConditions.Modify también tiene la misma sintaxis que FormatConditions.Add.

A continuación se muestra la lista de algunos valores / enumeración que pueden tomar algunos parámetros de 'Agregar' / 'Modificar':

Ejemplos de formato condicional de VBA

A continuación se muestran los ejemplos de formato condicional en Excel VBA.

Ejemplo 1

Supongamos que tenemos un archivo de Excel que contiene el nombre y las marcas de algunos estudiantes, y deseamos determinar / resaltar las marcas como Negrita y de color azul, que es mayor que 80, y como Negrita y Rojo en color, que es menor que 50. Veamos los datos contenidos en el archivo:

Usamos FormatConditions.Agregue la función como se muestra a continuación para lograr esto:

  • Vaya a Desarrollador -> Editor de Visual Basic:
  • Haga clic con el botón derecho en el nombre del libro de trabajo en el panel 'Proyecto-VBAProject'->' Insertar '->' Módulo '.
  • Ahora escriba el código / procedimiento en este módulo:

Código:

Sub formateo () End Sub
  • Defina la variable rng, condition1, condition2:

Código:

Sub formatting () Dim rng As Range Dim condition1 Como FormatCondition, condition2 Como FormatCondition End Sub
  • Establezca / fije el rango en el que se desea el formato condicional utilizando la función 'Rango' de VBA:

Código:

Sub formatting () Dim rng As Range Dim condition1 Como FormatCondition, condition2 Como FormatCondition Establecer rng = Range ("B2", "B11") End Sub
  • Elimine / borre cualquier formato condicional existente (si lo hubiera) del rango, usando 'FormatConditions.Delete':

Código:

Sub formatting () Dim rng As Range Dim condition1 Como FormatCondition, condition2 Como FormatCondition Establecer rng = Range ("B2", "B11") rng.FormatConditions.Delete End Sub
  • Ahora defina y establezca los criterios para cada formato condicional, usando 'FormatConditions.Add':

Código:

Sub formatting () Dim rng As Range Dim condition1 Como FormatCondition, condition2 Como FormatCondition Establecer rng = Range ("B2", "B11") rng.FormatConditions.Delete Establecer condición1 = rng.FormatConditions.Add (xlCellValue, xlGreater, "= 80 ") Establecer condición2 = rng.FormatConditions.Add (xlCellValue, xlLess," = 50 ") End Sub
  • Definir y establecer el formato que se aplicará a cada condición.

Copie y pegue este código en su módulo de clase 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

Ahora cuando ejecutamos este código usando la tecla F5 o manualmente, vemos que las marcas que son menores a 50 se resaltan en negrita y rojo, mientras que las que son mayores a 80 se resaltan en negrita y azul de la siguiente manera:

Nota: Algunas de las propiedades para la apariencia de celdas formateadas que se pueden usar con FormatCondition son:

Ejemplo # 2

Digamos que en el ejemplo anterior tenemos otra columna que también indica que el estudiante es un 'Topper' si obtiene más de 80 puntos, de lo contrario, pasa / no pasa escrito en contra de ellos. Ahora deseamos resaltar los valores indicados como 'Topper' como Negrita y Azul. Veamos los datos contenidos en el archivo:

En este caso, el código / procedimiento funcionaría de la siguiente manera:

Código:

Sub TextFormatting () End Sub

Definir y establecer el formato que se aplicará a cada condición.

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 en el código anterior que deseamos probar si el rango: 'C2: C11 ”contiene la cadena:“ Topper ”, por lo que el parámetro:“ Onamestor ”de' Format.Add 'toma la enumeración:” Xcontains ”a pruebe esta condición en el rango fijo (es decir, C2: C11), y luego realice el formato condicional requerido (cambios de fuente) en este rango.

Ahora, cuando ejecutamos este código manualmente o presionando la tecla F5, vemos que los valores de celda con 'Topper' se resaltan en azul y en negrita:

Nota: Por lo tanto, hemos visto en los dos ejemplos anteriores cómo funciona el método 'Agregar' en el caso de cualquier criterio de valor de celda (numérico o cadena 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 más de tres formatos condicionales a un rango usando el método 'Agregar', podemos usar 'Si' o 'seleccionar caso'.
  • Si el método 'Agregar' tiene su parámetro 'Tipo' como: 'xlExpression', entonces el parámetro 'Operador' se ignora.
  • Los parámetros: 'Fórmula1' y 'Fórmula2' en el método 'Agregar' pueden ser una referencia de celda, un valor constante, un valor de cadena o incluso una fórmula.
  • El parámetro: 'Fórmula2' se usa solo cuando el parámetro: 'Operador' es 'xlBetween' o 'xlNotBetween'; de lo contrario, se ignora.
  • Para eliminar todo el formato condicional de cualquier hoja de trabajo, podemos usar el método 'Eliminar' de la siguiente manera:
Cells.FormatConditions.Delete

Articulos interesantes...