Colecciones (Collections) en VBA

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

EstructuraDim  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 “,”.

EstructuraNombre 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:

EstructuraNombre 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:

EstructuraAbrir 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:

EstructuraNombreColecció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:

EstructuraNombre 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”.

EstructuraFor 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:

EstructuraContador =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:

EstructuraFor 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…

Colecciones (Collections) en VBA

También te puede interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *