miércoles, 7 de agosto de 2013

Excel: Condicionales If - then - else - next

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














No hay comentarios.:

Publicar un comentario

Deja tu pregunta o comentario aqui