Matrices en Visual Basic para aplicaciones

Las matrices en Visual Basic for Application son estructuras que normalmente almacenan conjuntos de variables relacionadas del mismo tipo. Se accede a las entradas de matriz por su índice numérico.

Por ejemplo, hay un equipo de 20 personas cuyos nombres deben guardarse para su uso posterior en código VBA. Uno podría simplemente declarar 20 variables para contener cada nombre, así:

Dim Team_Member1 como cadena Dim Team_Member2 como cadena ... Dim Team_Member20 como cadena

Pero puede usar una forma mucho más simple y organizada: almacene una lista de nombres de miembros del equipo en una matriz de 20 variables como Cordón:

Dim Team_Members (1 a 20) como cadena

En la línea que se muestra arriba, hemos declarado una matriz. Ahora vamos a escribir un valor a cada uno de sus elementos, así:

Team_Members(1) = "Juan Smith"

Una ventaja adicional de almacenar datos en una matriz, en comparación con el uso de variables separadas, se hace evidente cuando es necesario realizar la misma acción en cada elemento de la matriz. Si los nombres de los miembros del equipo se almacenaran en 20 variables separadas, se necesitarían 20 líneas de código para escribir cada vez para realizar la misma acción en cada uno de ellos. Sin embargo, si los nombres se almacenan en una matriz, puede realizar la acción deseada con cada uno de ellos mediante un bucle simple.

Cómo funciona se demuestra a continuación con un ejemplo de código que imprime los nombres de cada miembro del equipo de forma secuencial en las celdas de las columnas. A hoja de cálculo de Excel activa.

Para i = 1 a 20 celdas (i, 1). Valor = Team_Members (i) Siguiente i

Obviamente, trabajar con una matriz que almacena 20 nombres es mucho menos engorroso y más preciso que usar 20 variables separadas. Pero, ¿y si estos nombres no son 20, sino 1000? ¡¿Y si, además, se requiere mantener separados los apellidos y patronímicos?! Está claro que pronto será completamente imposible manejar tal volumen de datos en código VBA sin la ayuda de una matriz.

Matrices multidimensionales en Excel Visual Basic

Las matrices de Visual Basic discutidas anteriormente se consideran unidimensionales. Esto significa que almacenan una lista simple de nombres. Sin embargo, las matrices pueden tener múltiples dimensiones. Por ejemplo, una matriz bidimensional se puede comparar con una cuadrícula de valores.

Supongamos que desea guardar las cifras de ventas diarias de enero para 5 equipos diferentes. Esto requerirá una matriz bidimensional que consta de 5 conjuntos de métricas durante 31 días. Declaremos una matriz como esta:

Dim Jan_Sales_Figures (1 a 31, 1 a 5) como moneda

Para acceder a los elementos de la matriz Jan_Sales_Cifras, debe usar dos índices que indiquen el día del mes y el número de comando. Por ejemplo, la dirección de un elemento que contiene cifras de ventas de 2 oh equipos para 15 º Enero se escribiría así:

Cifras_ventas_enero(15, 2)

De la misma manera, puede declarar una matriz con 3 o más dimensiones: solo agregue dimensiones adicionales a la declaración de la matriz y use índices adicionales para referirse a los elementos de esta matriz.

Declarar matrices en Excel Visual Basic

Anteriormente en este artículo, ya analizamos varios ejemplos de declaración de matrices en VBA, pero este tema merece una mirada más detallada. Como se muestra, una matriz unidimensional se puede declarar así:

Dim Team_Members (1 a 20) como cadena

Tal declaración le dice al compilador de VBA que la matriz Miembros del equipo consta de 20 variables a las que se puede acceder en los índices del 1 al 20. Sin embargo, podríamos pensar en numerar nuestras variables de matriz del 0 al 19, en cuyo caso la matriz debería declararse así:

Dim Team_Members (0 a 19) como cadena

De hecho, por defecto, la numeración de los elementos de la matriz comienza desde 0, y en la declaración de la matriz, el índice inicial puede no especificarse en absoluto, así:

Dim Team_Members(19) como cadena

El compilador de VBA tratará dicha entrada como si declarara una matriz de 20 elementos con índices del 0 al 19.

Las mismas reglas se aplican cuando se declaran matrices de Visual Basic multidimensionales. Como ya se mostró en uno de los ejemplos, al declarar una matriz bidimensional, los índices de sus dimensiones están separados por una coma:

Dim Jan_Sales_Figures (1 a 31, 1 a 5) como moneda

Sin embargo, si no especifica un índice inicial para ambas dimensiones de la matriz y lo declara así:

Dim Jan_Sales_Figures(31, 5) como moneda

entonces esta entrada se tratará como una matriz bidimensional, cuya primera dimensión contiene 32 elementos con índices de 0 a 31, y la segunda dimensión de la matriz contiene 6 elementos con índices de 0 a 5.

Matrices dinámicas

Todas las matrices de los ejemplos anteriores tienen un número fijo de dimensiones. Sin embargo, en muchos casos no sabemos de antemano qué tamaño debería tener nuestra matriz. Podemos salir de la situación declarando una matriz enorme, cuyo tamaño seguramente será más grande de lo necesario para nuestra tarea. Pero tal solución requerirá mucha memoria adicional y puede ralentizar el programa. Hay una solución mejor. Podemos usar una matriz dinámica: esta es una matriz cuyo tamaño se puede establecer y cambiar cualquier número de veces durante la ejecución de una macro.

Una matriz dinámica se declara con paréntesis vacíos, así:

Dim Team_Members() como cadena

A continuación, deberá declarar la dimensión de la matriz durante la ejecución del código mediante la expresión Redim:

ReDim Team_Members (1 a 20)

Y si durante la ejecución del código necesita cambiar el tamaño de la matriz nuevamente, puede usar la expresión ReDim nuevamente:

Si Team_Size > 20 Entonces ReDim Team_Members (1 a Team_Size) End If

Tenga en cuenta que cambiar el tamaño de una matriz dinámica de esta manera provocará la pérdida de todos los valores almacenados en la matriz. Para almacenar datos que ya están en la matriz, debe usar la palabra clave Preservarcomo se muestra a continuación:

Si Team_Size > 20 Entonces ReDim Preservar Team_Members (1 Para Team_Size) End If

Desafortunadamente la palabra clave Preservar solo se puede usar para cambiar el límite superior de una dimensión de matriz. El límite inferior de una matriz no se puede cambiar de esta manera. Además, si la matriz tiene múltiples dimensiones, entonces usando la palabra clave Preservar, solo se puede cambiar el tamaño de la última dimensión de la matriz.

Deje un comentario