Curso Excel VBA y Macros – Cap. 19 – For Each…Next para recorrer objetos de una colección

<<CURSO COMPLETO EN YOUTUBE>>

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

<<CURSO COMPLETO EN YOUTUBE>>

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.

También te podría gustar...