En esta lección vas a aprender a utilizar la función de VBA FOR en Microsoft Excel para realizar bucles o iteraciones. Después de la función IF, es la más importante y seguramente será indispensable en la mayor parte de macros que programes.
Con ella seremos capaces, por ejemplo, de recorrer las filas o columnas de una hoja buscando un dato o de realizar la misma operación las veces que deseemos.
La sintaxis de la función de VBA FOR en Excel, está formada por varios comandos y es la siguiente:
'Acciones a realizar
Next
Las variables inicio y final marcan desde qué número comenzamos a contar (inicio) y en qué número terminamos la cuenta (final).
Por ejemplo, si escribimos:
'Acciones a realizar
Next
El sistema entra en un bucle donde va a contar desde 1 hasta 50 (en este caso de uno en uno) y en cada uno de esos 50 pasos va a ejecutar las “acciones a realizar”.
Así mismo, si queremos contar de dos en dos simplemente escribimos:
'Acciones a realizar
Next
En cambio, si queremos contar hacia atrás de tres en tres escribimos:
'Acciones a realizar
Next
Seguramente, con ejemplos prácticos sobre cómo utilizar la función de VBA FOR en Excel, te quede todo esto más claro.
En primer lugar, crea un libro nuevo, abre el editor VBA e inserta 5 módulos. Después, copia las siguientes macros en cada uno de ellos.
Macro 1. Rellenar un rango automáticamente.
'Macro que rellena el rango C1-C20 con el número de fila que le corresponde
'Cuenta desde i=1 hasta i=20
For i = 1 To 20
'Asigna el valor del número de iteración a la celda (i,"C")
Cells(i, "C").Value = i
'Aumenta una unidad el valor de i
Next
End Sub
Macro 2. Rellenar un rango automáticamente alternando filas.
'Macro que rellena el rango C1-C20 con el número de fila que le corresponde solo en las filas impares
'Borramos el contenido de las celdas del rango C1-C20
Range("C1:C20").ClearContents
'Cuenta desde i=1 hasta i=20
For i = 1 To 20 Step 2
'Asigna el valor del número de iteración a la celda (i,"C")
Cells(i, "C").Value = i
'Aumenta una unidad el valor de i
Next
End Sub
Macro 3. Buscar una cadena de texto en una columna y mostrar ventana de texto con el valor de la fila en que se encuentra.
'Macro que busca la palabra Ana en la columna G desde la fila 11 hacia atrás
'Cuenta desde i = 11 hasta i = 1 (hacia atrás)
For i = 11 To 1 Step -1
'Si el contenido de la celda es ANA entonces
If Cells(i, "G").Value = "Ana" Then
'Abrimos un cuadro de diálogo indicando en qué fila se encuentra
MsgBox "Encontrado Ana en fila: " & i
End If
'Disminuimos una unidad el valor de i
Next
End Sub
Macro 4. Contar el número de veces que se repite una palabra en un rango.
'Macro que cuenta el número de palabras Ana en el rango C1-C20
'Inicializamos la variable a 0
numero = 0
'Cuenta desde i = 11 hasta i = 1 (hacia atrás)
For i = 1 To 20
'Si el contenido de la celda es ANA entonces
If Cells(i, "G").Value = "Ana" Then
'Abrimos un cuadro de diálogo indicando en qué fila se encuentra
numero = numero + 1
End If
'Aumentamos una unidad el valor de i
Next
'Abrimos un cuadro de diálogo indicando el número de palabras Ana
MsgBox "Número de palabras Ana: " & numero
End Sub
Macro 5. Borrar el contenido de un rango de celdas.
'Macro que restablece la hoja
'Borramos el contenido de las celdas del rango C1-C20
Range("C1:C20").ClearContents
End Sub
En segundo lugar, rellena la hoja de cálculo como aparece en la figura. Por último, tendrás que crear 5 botones y asignarles las macros anteriores.
A continuación, te dejo un par de enlaces donde explico cómo configurar Microsoft Excel para el uso de macros y cómo asignar macros a botones, por si te interesan.
Como resultado, la primera de las macros rellena las celdas del 1 al 20 de la columna C con el número de fila correspondiente.
En la primera iteración i = 1, luego:
Y, en este caso es:
Así que, asignamos el valor 1 a la celda C1.
En la segunda iteración i = 2, luego:
Del mismo modo, asignamos el valor 2 a la celda C2.
Y así sucesivamente hasta el valor 20, fácil ¿no?
La segunda de las macros hace lo mismo, pero solo rellena las filas impares. A continuación, vamos a ver cómo funciona.
For i = 1 To 20 Step 2
Con esta instrucción empezamos en 1 y terminamos en 20 como antes, pero dando saltitos de 2 en 2.
En la primera iteración i = 1, luego:
Y, en este caso es:
Así que, asignamos el valor 1 a la celda C1.
En la segunda iteración i = 3 (recuerda que vamos sumando de dos en dos), luego:
Del mismo modo, asignamos el valor 3 a la celda C3.
Y así, sucesivamente, hasta el valor 19. El siguiente valor sería el 21 que sale fuera del límite (20) y terminaría el bucle.
Con la tercera macro, vamos a buscar la palabra “Ana” en la columna G desde la fila 11 hacía atrás.
Empezamos la iteración con i = 11, y comprobamos si la celda G11 contiene la palabra “Ana”. Como no es el caso, no hacemos nada y restamos una unidad a i.
En la segunda iteración i = 10, y en la celda G10 tampoco encontramos la palabra Ana, luego no hacemos nada y restamos una unidad a i.
Por fin, en la tercera iteración (i = 9), encontramos la palabra Ana en la celda G9, y mostramos un cuadro de diálogo con la fila donde hemos encontrado el resultado.
En el ejemplo, esto sucede además para las filas 6, 4 y 1.
La cuarta macro va a hacer un recuento de palabras “Ana” en el rango C1-C20.
Antes de nada, inicializamos la variable número a 0.
En la primera iteración i = 1, luego:
Sería:
El valor de G1 es “Ana”, luego se cumple y se realiza la operación:
numero = numero + 1
luego,
numero = 0 + 1 = 1
Sumamos una unidad a i.
En la segunda iteración i =2, G2 no es “Ana”, luego no se cumple.
Sumamos una unidad a i.
En la tercera iteración (i = 3) tampoco coincide el valor de la celda G3 con la palabra “Ana”.
En la cuarta iteración (i = 4), G4 es igual a “Ana”, luego realizamos la operación:
numero = numero + 1
quedando,
numero = 1 + 1 = 2
Sumamos una unidad a i.
En la quinta iteración (i = 5) tampoco coincide el valor de la celda G5 con la palabra “Ana”.
En la sexta iteración (i = 6), G6 es igual a “Ana”, luego realizamos la operación:
numero = numero + 1
quedando,
numero = 2 + 1 = 3
Sumamos una unidad a i.
Hasta la novena iteración (i = 9) no vuelve a coincidir el valor de la columna G con “Ana”.
Realizaríamos la operación:
numero = numero + 1
quedando,
numero = 3 + 1 = 4
Sumamos una unidad a i.
Ya no existen más coincidencias, luego el total del número de palabras “Ana” que hay en el rango es 4.
La quinta macro restablece la hoja por si se quiere volver a repetir la operación con el resto de macros.
Una vez conocemos las funciones IF y FOR vamos a ir subiendo el nivel de programación paulatinamente y elaborando códigos de programación cada vez más complejos, aunque aún nos quedan algunos conceptos y funciones que aprender.
Con esto llegamos al final de la decimosexta lección, en la que has aprendido a usar la función de VBA FOR para Excel.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Nos vemos en el próximo capítulo.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
« L15. Buscar un valor en una columna Excel (Find).
L17. Comando AdvanceFilter Unique. »
0 comentarios