Las colecciones (Collections) son básicamente grupos de variables almacenadas en un solo lugar. Las colecciones podrían llegar a confundirse con los Arrays (ver tutorial de Arreglos para mayor información), pero la realidad es que las Colecciones, por sus características, permiten el manejo y acceso de mayor cantidad de datos. Bajo este enfoque es importante que aprendamos a identificar cuando recurrir a un arreglo o a una colección.
La ventaja principal de las Collections respecto a los Arrays es el manejo de datos en redimensionamiento. Haciendo un ejemplo ilustrativo, si tenemos una colección de cuadros de colores como los de la imagen, y deseamos eliminar un cuadro intermedio e incluir otro, las acciones serian así:
En contraparte, a diferencia de los Arrays, las variables de las colecciones no son actualizables, es decir, solo podemos añadir y eliminar elementos, pero no modificar. Esta característica hace que los Collections sean muy útiles cuando necesitamos agrupar elementos sin valores duplicados.
A continuación te describimos algunas instrucciones para operar los elementos tipo colección desde VBA.
1. Declaración de la colección
Existen varias formas de declarar una colección, pero te recomendamos hacerlo similar a una variable, de la siguiente forma
Estructura | Dim As Nombre de la colección As Collection Set Nombre de la colección = New Collection |
Ejemplo:
Dim Square As Collection
Set Square = New Collection
2. Añadir elementos en la colección
Añadir elementos en una colección es algo sencillo e intuitivo. Básicamente debemos asignarle a la variable previamente declarada la acción que se desea hacer, en este caso añadir (add). Las variables se añadirán una tras otra con valor de índice consecutivo creciente partiendo de número 1, es decir 1, 2, 3… y así sucesivamente. También podrías añadir (opcionalmente) una etiqueta única o Key a cada variable para su rápida identificación. En nuestro ejemplo, crearemos una colección que almacenará 3 nombres de colores: Negros, Gris y Verde, y el color Gris será identificado (Key) como “Favorite”. Esta identificación debe estar separada por una “,”.
Estructura | Nombre de la colección.Acción Valor |
Ejemplo:
Square.Add "Black" 'Índice 1
Square.Add "Grey", “Favorite” 'Índice 2
Square.Add "Green" 'Índice 3
Si deseamos añadir un valor intermedio, por ejemplo, antes del color Gris, deberíamos conocer La identificación de referencia (índice o Key) y utilizar una estructura como la mostrada en el siguiente ejemplo:
Estructura | Nombre de la colección.Add Valor a añadir , before: IdentificaciónReferencia |
Ejemplo 1:
Square.Add "Red1", before:=2
Ejemplo 2:
Square.Add "Red1", before:= “Favorite”
Para añadir valores a una colección, puedes repetir las operaciones descritas arriba tantas veces como variables necesites en tu arreglo o también puedes usar un lazo o Loop (puedes ver nuestro tutorial de Loop para mayor información). Una estructura típica sería:
Estructura | Abrir Loop que barre la celda o columna Nombre de la colección Celda Cerrar el Loop |
Ejemplo:
Dim Square As Collection
Dim i as long
Dim ws as Worksheet
Set ws=Sheet1 'Nombre de la hoja
Set Square = New Collection
i = 2
Do While IsEmpty(ws.Cells(i, 1)) = False
Square.Add ws.Cells(i, 2)
i = i + 1
Loop
3. Acceder a los elementos de una colección
Para conocer los valores de las variables dentro de una colección, sólo debemos conocer la identificación de referencia y emplear la siguiente instrucción:
Estructura | NombreColección(IdentificaciónReferencia) |
Ejemplo 1:
Debug.Print Square(2)
Ejemplo 2:
Debug.Print Square("Favorite")
4. Eliminar elementos de la colección
Similar al caso anterior, para eliminar un elemento de la colección sólo es necesario conocer la identificación de referencia (índice o Key). Las instrucciones serian:
Estructura | Nombre de la colección.Remove Índice referencia |
Ejemplo:
Square.Remove 3
Análogamente, si deseas eliminar varios elementos de la colección podrías removerlos uno a uno o hacer un Loop, según sea tu preferencia.
5. Barrido por los elementos de la colección
Si deseamos recorrer todos los elementos de una colección, para revisar o usar sus valores, tenemos las siguientes opciones:
5.1 Modo For-Next /Do Loop
La base de esta modalidad es el conteo de elementos en la colección “Count”.
Estructura | For Contador= i = 1 To NombreColección.Count Acción Next |
Ejemplo:
For i = 1 To Square.Count
Debug.Print Square (i)
Next
Ahora bien, si te sientes más a gusto empleando el Do-Loop, podrías hacer algo muy similar, así como se muestra a continuación:
Estructura | Contador =1 Do While(Contador<=NombreColección.Count) Acción Contador= Contador+1 Loop |
Ejemplo:
i = 1
Do While (i <= Square.Count)
Debug.Print Square (i)
i = i + 1
Loop
5.2 Modo For- Each
Básicamente esta forma es la misma de For-Next, la diferencia es que esta busca por “Cada” elemento del arreglo en lugar de usar un contador. Esta opción ha mostrado mejores resultados de velocidad de respuesta. La estructura seria la siguiente:
Estructura | For Each Elemento de la colección In NombreColección Acción Next |
Ejemplo:
For Each Elem In Square
Debug.Print Elem
Next
Quieres saber más? Contáctanos…