Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Excel no es nada sin los condicionales y los bucles. Este apartado es crucial puesto que es la base de casi todo lo que
harás en VBA para Excel.
TIPO 1
La sintáxis más sencilla, la que básicamente utilizaremos el 90% de nuestro tiempo es la siguiente:
If comprobación_lógica then
End if
Si queremos hacer instrucciones muy sencillas podremos ponerlo en una misma línea:
En el siguiente ejemplo tenemos el mismo condicional de las dos formas más arriba explicadas. La instrucción que se
ejecuta es rellenar una celda con el color amarillo.
TIPO 2
Para instrucciones en las que tenemos un árbol de decisión en las que queremos ejecutar algo si es verdadero y otra
cosa si es falso tendremos la siguiente sintaxis.
If comprobación_lógica Then
Else
End if
En el siguiente ejemplo vemos que si se cumple la condición la primera celda A1 se coloreará de amarillo y sino de rojo.
TIPO 3
Si queremos añadir otra condición de comprobación entre medias de nuestro condicional cuando la primera instrucción
resulta ser falsa la sintaxis que usaremos es la siguiente:
If comprobación_lógica Then
End if
En el siguiente ejemplo vemos como, si se cumple la primera comprobación, la celda A1 se pondrá en verde o si se
cumple la segunda comprobación, la celda A1 se pondrá en rojo.
Fundamentalmente hay dos maneras para hacer una doble condicional en VBA. Usaremos un ejemplo para entenderlo
mejor.
Queremos comprobar que en las celdas A1 y A2 tenemos valores mayores de 0. Para eso podemos hacer dos IF uno
dentro de otro o un único IF pero con un AND
EJEMPLO1: IF DOBLE
El uso más ilustrativo y más fácil de entender es en el que usamos una instrucción IF dentro de otra instrucción IF. En el
siguiente ejemplo veremos como
If Range("A1") > 0 Then
End If
End If
Este tipo de condicional puede ser muy útil y fácil de leer pero en ocasiones, cuando no tenemos la opción de False del
código porque no hace falta, pero puede parecer más sencillo hacer un Condicional con IF y AND como veremos en el
siguiente ejemplo.
EJEMPLO 2: IF Y AND
En una misma línea de código unimos las dos instrucciones IF mediante el conector AND.
End If
Esta última manera para más sencilla y limpia que la anterior. Hay menos líneas lo que lo hace más comprensible.
EJEMPLO 3: IF Y OR
En este último ejemplo veremos como se pueden poner dos condiciones en las que sólo hay que cumplir una de ella.
Para ello usaremos el método OR de VBA que nos permitirá enlazar dos condicionales en VBA
End If
Entre el ejemplo 2 y el ejemplo 3 sólo varía que usamos AND u OR. Esto hace que en el ejemplo 2 se tengan que cumplir
las dos condiciones y en el ejemplo 1 sólo haga falta que se cumpla una de ellas.
Una de las cosas que más me gustan de VBA es que puede hacer por ti cosas tan increíbles como repetir un montón de
veces lo mismo sin apenas esfuerzo.
Este es el caso del bucle For Next en VBA y dirás, ¿qué es un bucle en VBA? Pues es la repetición de cierto código un
número determinado de veces.
SINTAXIS
El bucle FOR NEXT en VBA nos permite en Excel (o cualquier otro lenguaje de programación) repetir una acción un
número de veces dado. Su sintaxis es la siguiente:
For CONTADOR = COMIENZO To FINAL [Step VALOR_DE_PASO]
'código
[Exit For]
'código
Next
Donde:
Step VALOR_DE_PASO: opcional. Valor numérico que irá sumándose al CONTADOR a lo largo del bucle. Es un numero
natural.
‘código: es el código de la expresión que queremos que se ejecute dentro del bucle todas las veces.
Exit For: sentencia opcional que nos permite salir del bucle y continuar la macro a partir del NEXT final sin necesidad de
haber recorrido el bucle completamente.
EJEMPLOS
A continuación, vamos a ver una serie de ejemplos que nos permitan entender mejor el bucle FOR NEXT en VBA. En cada
ejemplo veremos una particularidad en concreto de este tipo de bucles y se explicará.
Ejemplo 1:
En este ejemplo tenemos el bucle FOR NEXT en VBA más sencillo. El bucle cuenta de 1 a 10 y va poniendo en una
columna el valor del contador.
For CONTADOR = 1 To 10
fila = CONTADOR
Cells(fila, 1) = CONTADOR
Next
Ejemplo 2:
En este ejemplo añadimos la propiedad «step 2» que incrementará el contador de 2 en 2. Es decir, inicialmente el
contador valdrá 1, luego 3, luego 5 y así sucesivamente.
fila = CONTADOR
Cells(fila, 2) = CONTADOR
Next
Ejemplo 3:
En este ejemplo el bucle for next en vba va contando hacia atrás gracias al step -1 y al contador que empieza en vez de
en 1 en 10 y acaba en 1.
For CONTADOR = 10 To 1 Step -1
fila = CONTADOR
Cells(fila, 3) = CONTADOR
Next
Ejemplo 4:
En este ejemplo utilizamos la expresión Exit For cuando el contador llega hasta 49 y lanzamos un mensaje en pantalla en
este momento.
If CONTADOR = 49 Then
Exit For
End If
Next
Ejemplo 5:
En este ejemplo usamos un código muy similar al anterior, pero añadimos al final del IF (ver más sobre IF en VBA) otro
pedacito de código.
If CONTADOR = 49 Then
Exit For
End If
fila = CONTADOR
Cells(CONTADOR, 5) = CONTADOR
Next
EJERCICIO
Crea una macro con el bucle FOR NEXT en VBA que cuente de 5 en 5 y vaya poniendo en celda sucesivas el valor del
contador. El contador deberá empezar en 0 y terminar en 100. Deberá escribirse en la columna F desde la fila 1 hasta la
fila 20.
fila = 0
fila = fila + 1
Next
El truco consiste en utilizar la función OFFSET para ir avanzando a lo largo de las filas. La variable fila se incrementa en
uno cada vez que se recorre el bucle.
En el siguiente enlace podéis descargar un libro de Excel que contiene las diferentes macros que hemos ido viendo y así
podréis modificarlas y aprender a usarlas como un verdadero experto el bucle FOR NEXT en VBA.
SINTAXIS Y FUNCIONAMIENTO
El funcionamiento del bucle Do While en VBA es muy sencillo, repetiremos una acción tantas veces que sea necesario
siempre y cuando se evalúe una condición. Por ejemplo, iremos avanzando a lo largo de una columna por todas sus
celdas e iremos sombreando en amarillo hasta que una celda sea mayor que un valor dado.
La sintaxis puede resultar un poco compleja inicialmente, pero una vez que veamos algunos ejemplos quedará
perfectamente. La sintaxis se compone de las siguientes partes
Do While Mi_expresion
[Nuestro código 1]
[Exit Do]
[Nuestro código 2]
Loop
o también de la forma
Do
[Nuestro código 1]
[Exit Do]
[Nuestro código 2]
Loop While Mi_expresion
Donde en el primer caso evaluaremos inicialmente la expresión que queremos del tipo verdadero o falso y en el segundo
caso lo evaluaremos después. Esto nos permitirá jugar un poco con el bucle.
Recordemos que:
Mi_expresión: es una condición lógica que devuelve verdadero o falso. Si se evalúa como verdadero el bucle continuará,
sino, se terminará.
Exit Do: nos permitirá salir del bucle en cualquier momento dada una condición (por ejemplo si hemos repetido el bucle
mil veces)
Nuestro código 1 o 2: este será el código que ejecutemos dentro del bucle. Puede ponerse antes, después o en ambas
posiciones respecto del Exit Do.
EJEMPLOS DEL BUCLE DO WHILE EN VBA
A continuación vamos a ver una serie de ejemplos que queremos para que se pueda entender mejor cómo funciona el
bucle Do While en VBA.
EJEMPLO 1
En este ejemplo vamos a sombrear en amarillo las celdas del rango que sean uno hasta que dejen de serlo.
Set c = mi_rango(1)
Do While c.Value = 1
c.Interior.Color = vbYellow
Set c = c.Offset(1, 0)
Loop
EJEMPLO 2
En el siguiente ejemplo vamos a sombrear en amarillo todas las celdas que sean menores que 100, pero si encontramos
una celda menor que 50 saldremos del bucle:
Set c = Range("b1")
c.Interior.Color = vbYellow
Set c = c.Offset(1, 0)
Loop
EJEMPLO 3
En este tercer ejemplo vamos a poner a la derecha de la celda que se está evaluando un OK si evaluamos que su valor es
menor que 100 y mayor que 50. Esto nos permitirá ver que en la condición lógica que vamos a evaluar podemos utilizar
el and para hacer una doble evaluación.
Set c = Range("c1")
Do
c.Offset(0, 1) = "OK"
Set c = c.Offset(1, 0)
EJEMPLO 4
En el siguiente ejemplo vamos a ver cómo se puede también utilizar una expresión anidada con Or para evaluar una
condición.
Set c = Range("e1")
c.Offset(0, 1) = "OK"
Set c = c.Offset(1, 0)
Loop
SINTAXIS
La sintaxis de la instrucción Select Case en VBA es muy sencilla pero hay que saber cómo usarla para sacarle verdadero
partido. En el siguiente recorte de código VBA puedes ver cómo es la sintaxis.
Case Else
'código para cuando no hay coincidencias
End Select
Donde:
mi_expresión: es una variable que queremos evaluar. Puede ser numérica o de tipo texto y será contra la que evaluemos
mi_expresion_1, mi_expresion_2…
mi_expresion_1,2…n: es un valor o conjunto de valores numéricos o de texto contra los que se evaluará mi_expresion.
En caso de evaluarse como verdadera se ejecutará el código… sino, pasará a evaluar la siguiente mi_expresion_n.
Case Else: este valor es opcional y lo usaremos para cuando no hayamos conseguido ninguna equivalencia con
mi_expresión y queramos ejecutar algún código.
EJEMPLOS
EJEMPLO1
En el siguiente ejemplo vamos a ver el caso más sencillo de Selec Case en VBA. Las condiciones que se evalúan tienen
que ser iguales a la expresión inicial. En este ejemplo se quiere evaluar la variable Nombre. En función del Nombre se
asignará un valor de color de fondo u otro.
Select Case Nombre
Case "Enrique"
color_fondo = vbYellow
Case "Juan"
color_fondo = vbRed
Case Else
color_fondo = vbWhite
End Select
EJEMPLO 2
En este ejemplo se evalúa la variable Edad y en función de su valor (dado por intervalos) se da un atributo a la variable
tipo_edad.
EJEMPLO 3
En este ejemplo, en función de la primera letra del ID (que es la variable que vamos a evaluar) asignaremos un valor a la
variable tipo para clasificar el Primer_numero_ID.
Case 1, 2, 3
tipo = "grupo1"
Case 4, 5, 6
tipo = "grupo2"
Case Else
tipo = "grupo3"
End Select
EJEMPLO 4
Por último, en este ejemplo, para evaluar la variable Altura, las condiciones que se utilizan son expresiones aritméticas.