Macros para el manejo de los elementos de una colección

Colecciones
  • Una colección es un objeto que contiene otros objetos.
  • Una colección proporciona un medio para acceder a otros miembros del mismo tipo.

Ejemplos de colecciones
  • Workbooks
  • Worksheets
  • Charts
  • Sheets
  • Range

Uso de la instrucciones For Each
  • For Each...Next recorre los elementos de una colección.
  • For Each...Next repite el grupo de instrucciones para cada uno de los objetos de una colección.
  • For Each...Next utiliza una variable tipo colección en lugar de una variable numérica como lo hace el ciclo For...Next.

Estructura:
For Each elemento In colección
    [ instrucciones]
Next [ elemento ]


Muestra el nombre de todas las hojas del libro activo

Sub Colecciones()
' Muestra el nombre de todas las hojas contenidas en el libro
'
Dim ws As Worksheet

    For Each ws In Worksheets
        MsgBox ws.Name
    Next

End Sub


Revisar el contenido de un conjunto de celdas

Sub RevisarContenidos()
' Muestra el contenido del conjunto de celdas seleccionadas
' Despliega el resultado en la ventana del depurador (Ctrl - g)
'
Dim Celda As Range
For Each Celda In Selection
    Debug.Print Celda.Value
Next Celda
End Sub


Cambiar de color aquellas celdas que cumplan una condición dada

Tabla antes de aplicar el procedimiento:

Excel tabla trabajo 2


Sub Colecciones2()
' Cambia de color a las celdas cuyo contenido sea
' mayor o igual a 10.
'
Dim Celda As Range

    For Each Celda In Selection.Cells
        If Celda.Value >= 10 Then Celda.Font.ColorIndex = 3
    Next
    
End Sub

Resultado después de aplicar el procedimiento:

Excel cambio de color celda por valor



Transforma las celdas que contienen una fórmula a valores

Sub FormulaDatos()
'Transforma la selección dada a valores
'
Dim Celda As Range

    For Each Celda In Selection
        If Celda.HasFormula Then
            Celda.Formula = Celda.Value
        End If
        
    Next Celda

End Sub


Muestra en la ventana del depurador el contenido de un rango seleccionado

Sub muestraContenido()
Dim i As Integer

For i = 1 To Selection.Cells.Count
   Debug.Print Selection.Cells(i).Value
Next i

End Sub