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:

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:

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