Curso Excel VBA y Macros – Cap. 19 – For Each…Next para recorrer objetos de una colección
En este tutorial veremos cómo hacer uso de la instrucción For Each-Next que nos ayudará a recorrer todos los elementos de una colección o una matriz y ejecutar instrucciones.
Esta instrucción la podemos combinar perfectamente con la instrucción If Then Else para poder evaluación ciertas condiciones con cada uno de los elementos recorridos.
Ver video Capítulo 19 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Colecciones en VBA
Recordemos que una colección es un conjunto de elementos del mismo tipo, que comparten características y similitudes.
Así como vimos en un capítulo de este curso, supongamos que tenemos una colección de casas, todas son del mismo tipo, pero con ciertas características. Una casa sería el elemento único de esa colección.
Hablando de Excel, tenemos colecciones de Archivo, Hojas, Celdas, Tablas dinámicas, Gráficos, etcétera.
Sintaxis de la instrucción For Each…Next
Veamos la sintaxis de esta instrucción que nos permitirá recorrer elementos en una colección.
For Each elemento en el grupo
[ instrucciones ]
[ Exit For ]
[ instrucciones ]
Next [ elemento ]
Donde:
-
For Each. Comienzo de la instrucción. En español se diría “por cada”.
-
Elemento. Cada uno de los elementos u objetos de la colección o matriz.
-
Instrucciones. Las acciones que se realizará sobre cada uno de los elementos u objetos.
-
Exit For. Opcionalmente podemos detener el ciclo que recorre los elementos y salimos del ciclo For Each. Aquí podemos incluir IF para evaluar condiciones.
-
Next. Es el cierre del ciclo For Each.
Ejemplos de la instrucción For Each-Next
En este ejemplo recorremos todas las hojas del archivo y mostramos en un mensaje de tipo MsgBox los nombres de cada una de las hojas.
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Sub RecorrerHojas() Dim Hoja As Worksheet For Each Hoja In Application.Worksheets MsgBox Hoja.Name Next Hoja End Sub
En esta macro protegemos todas las hojas del archivo asignándoles un password.
Sub ProtegerHojas() Dim Hoja As Worksheet For Each Hoja In Application.Worksheets Hoja.Protect "prueba" Next Hoja End Sub
Ahora, usando el mismo password, vamos a desproteger todas las hojas.
Sub DesprotegerHojas() Dim Hoja As Worksheet For Each Hoja In Application.Worksheets Hoja.Unprotect "prueba" Next Hoja End Sub
En esta macro, haciendo uso del objeto Selection, que será la selección de celdas de un rango, vamos a analizar si los valores de las celdas son de tipo de texto, y de ser así vamos a asignarle la propiedad Bold o negrita a esas celdas.
Sub RecorrerCeldas() Dim Celda As Range For Each Celda In Selection If Not VBA.IsNumeric(Celda) Then Celda.Font.Bold = True End If Next Celda End Sub
Recorriendo un rango de celdas, vamos a indicar en esta macro que si el valor de cada celda es mayor a 10 entonces se le asigne el color verde al fondo, pero como For Each recorrerá cada una de las celdas, cuando se encuentre una celda que sea menor a 10, se detendrá el ciclo For Each usando Exit For.
Sub ValidarCelda() Dim Celda As Range For Each Celda In Range("A14:B17") If Celda.Value > 10 Then Celda.Interior.Color = VBA.vbGreen Else Exit For End If Next Celda End Sub
Y en esta última macro vamos a mostrar en un mensaje la cantidad de hojas ocultas en el archivo. Recorremos todas las hojas y validaremos si tiene la propiedad Visible en True, y según las que encuentre iremos acumulando una suma en la variable ConteoHojas.
Sub HojasVisible() Dim Hoja As Worksheet Dim ConteoHojas As Integer ConteoHojas = 0 For Each Hoja In Application.Worksheets If Hoja.Visible = False Then ConteoHojas = ConteoHojas + 1 End If Next Hoja If ConteoHojas = 0 Then MsgBox "No hay hojas ocultas": Exit Sub MsgBox "Hay " & ConteoHojas & " hoja(s) ocultas" End Sub
Descargar archivo de ejemplo
019 – For Each Next – EXCELeINFO.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.