Para trabajar con condicionales, primero es preciso entender que significa cada parámetro, como se explica a continuación:
If: sirve para iniciar la condición que queremos expresar y significa "SI"
Condición: Es la condición que queremos validar
then: Se pone al final de la condición y puede traducirse como "ENTONCES"
Acción verdadero: Es la acción que queremos que haga la macro si la condición se cumple
else: Se utiliza como conexión para expresar otra acción y puede traducirse como "DE LO CONTRARIO"
Acción falso: Es la acción que queremos que haga la macro, si la condición no se cumple
End if: Sirve para expresar la finalizacion del condiciona
La estructura quedaría así:
If Condición then
Acción Verdadero
else
Acción Falso
End if
Vamos a hacer algunos ejemplos prácticos para ilustrar la ejecución de un condicional:
1) Cambiar color a celda si posee un valor mayor que un numero especifico
Vamos a suponer que necesitamos saber si una celda posee un valor mayor que 100, por lo cual haremos que la celda se ponga en color rojo si posee un valor mayor que 100, de lo contrario, si la celda tiene un valor menor que 100, se debe poner en color verde.
Sub Macro1()
If Range("A1").value > 100 Then
Range("A1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
Se pueden utilizar las siguientes expresiones para jugar con los valores:
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
<> Diferente de
2) Cambiar color a celda si posee un texto especifico
Vamos a suponer que necesitamos saber si una celda posee el texto "FALSO", por lo cual haremos que la celda se ponga en color rojo si posee el texto "FALSO", de lo contrario, si la celda tiene un texto diferente o esta vacía, se debe poner en color verde.
Sub Macro1()
If Range("A1").text = "FALSO" Then
Range("A1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
Esta instrucción funciona para cualquier texto, lo importante es ser cuidadoso con la escritura y ortografía, ya que la macro solo ejecutara la acción si encuentra el texto idéntico, tener especial cuidado con signos de puntuación, espacios y tildes en las palabras.
Hasta ahora hemos editado celdas especificas cuando cumplen las condiciones, pero en ocasiones se requiere cambiar el formato en la celda que este activa o seleccionada en el momento como veremos ahora:
3) Cambiar formato a celda activa si posee un valor mayor que 100
Sub Macro2()
If ActiveCell.value > 100 Then
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
4) Cambiar formato a celda activa o seleccionada si posee texto especifico
Sub Macro1()
If ActiveCell.Text = "FALSO" Then
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
Ahora vamos a suponer que necesitamos comparar los valores de dos celdas especificas
5) Si el VALOR de una celda especifica es igual al de otra celda, se cambiara el color
Sub Macro2()
If Range("A1").Value = Range("A2").Value Then
Range("A1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
6) Si el TEXTO de una celda especifica es igual al de otra celda, se cambiara el color
Sub Macro2()
If Range("A1").text = Range("A2").text Then
Range("A1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
7) Ahora vamos a suponer que tenemos una lista de números y queremos cambiar de color a las celdas de la lista que tienen un valor mayor a 100.
Para esto usaremos la función for - next, que sirve para recorrer valores uno a uno de forma automática y se puede enlazar con un condicional anidado para hacer tareas rápidamente
vamos a suponer que tenemos 100 valores ubicados entre las celdas A1 y A99 y vamos a cambiar a color verde las celdas que tengan valores menores que 100, y vamos a cambiar a color rojo las celdas que tengan valores menores que 100
así quedaría la instrucción:
For i = 0 To 98
If Range("A" & 1 + i).Value > 100 Then
Range("A" & 1 + i).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
Next i
End Sub
funciona similar si queremos hacerlo con un texto especifico:
For i = 0 To 98
If Range("A" & 1 + i).Text = falso Then
Range("A" & 1 + i).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
Next i
End Sub