Trabajando con Arrays para Programación VBA en Excel 2016

La mayoría de los lenguajes de programación soportan matrices, incluyendo VBA. Un array es un grupo de variables que comparten un nombre. Se hace referencia a una variable específica en el array utilizando el nombre del array y un número de índice entre paréntesis. Por ejemplo, puede definir una matriz de 12 variables de cadena para contener los nombres de los meses del año. Si nombra el array NombresDeMes, puede referirse al primer elemento del array como NombresDeMes(1), al segundo elemento como NombresDeMeses(2), y así sucesivamente.

Concepto de array dinámico

En informática son muchos los programas o herramientas que requieren tener la capacidad de asumir nuevos elementos, en consecuencia estos programas crecen de manera constante, pero esto genera un problema a efectos de la optimización del espacio.

Digamos que tenemos programas u operaciones que ocupan muchos GB y son cientos de estas operaciones, necesitamos un sistema que permita hacer dichas operaciones y crecer pero que también se reduzca nuevamente cuando estas operaciones se eliminen, única manera de optimizar el espacio y mantener libre el espacio que no se está utilizando. Es acá donde entra el array dinámico.

El funcionamiento lógico de un hosting compartido

Si tuviésemos que comparar un array dinámico con un elemento un poco más conocido y sencillo de entender en internet podemos decir que es bastante parecido al funcionamiento de un hosting compartido.

¿Qué es un array dinámico?

El hosting o alojamiento web, es el espacio que se necesita para que muchas páginas estén al aire en internet, es el lugar donde “cae” todo el peso de esas páginas. Un hosting compartido es un espacio con X capacidad que, al dividirse entre docenas o cientos de usuarios, permite que estos dispongan de esa capacidad según requieran, en algún momento el usuario A requerirá de gran espacio, en otro momento será otro el que más use el mismo según el tráfico de su sitio, por ejemplo, así, todo se mantiene en equilibrio subiendo o bajando la capacidad y los procesos según se requiera en el momento.

Esta adaptación constante genera dudas. Algunos piensan que mientras un array normal, manteniendo elementos estables permite un funcionamiento regular de un sistema, un array dinámico afectará dicho funcionamiento al estar constantemente creciendo o decreciendo según el uso de recursos dentro del mismo.

El crecimiento o decrecimiento en un array dinámico no afecta el funcionamiento

La verdad es que son temores infundados, los programadores saben que un array dinámico trabaja haciendo justo lo contrario, optimiza el funcionamiento de cualquier programa, por eso se utiliza para proyectos que necesitan, por ejemplo, inscripción de decenas de miles de personas o elementos, mientras se suman o borran elementos, el espacio crece y decrece pero siempre optimizando el resto de las funciones.

Como contraparte, si no se cuenta con array dinámico existe la posibilidad de que, en cuanto el crecimiento de los elementos se acerque al tope de la capacidad del sistema, se afecte el funcionamiento del mismo hasta potencialmente colapsar, ya que habría un límite o línea de seguridad cerca del tope y al superarlo en cualquier momento se puede experimentar una caída brusca.

Declarar array dinámico

Declarar un array se corresponde con tareas propias de un programador y se refiere a especificar en el lugar correspondiente (en este caso la cabecera del módulo), las características del funcionamiento del mismo. En la declaración del array se determina si este tendrá implícita la opción “redimensionar”, que diferencia el array fijo del dinámico y es lo que permite que el array dinámico altere su tamaño según se requiera o, por el contrario, que el array fijo tenga un tamaño no modificable.

Declaración de matrices

Antes de poder usar un array, debe declararlo. Sin excepciones. A diferencia de las variables normales, el VBA es muy estricto con esta regla. Se declara un array con una sentencia Dim o Public, de la misma forma que se declara una variable regular. Sin embargo, también necesita especificar el número de elementos en el array. Para ello, especifique el primer número de índice, la palabra clave A y el último número de índice, todo ello entre paréntesis. El siguiente ejemplo muestra cómo declarar una matriz de 100 enteros:

Dim MyArray(1 a 100) Como un número entero

Cuando se declara un array, se puede elegir especificar sólo el índice superior. Si omite el índice más bajo, VBA asume que es 0. Por lo tanto, ambas declaraciones siguientes declaran el mismo arreglo de 101 elementos:

Dim MyArray (0 a 100) Como IntegerDim MyArray (100) Como Integer

Si desea que VBA asuma que 1 (en lugar de 0) es el índice más bajo para sus matrices, incluya la siguiente declaración en la sección Declaraciones en la parte superior de su módulo:

Opción Base 1

Esta declaración obliga a VBA a usar 1 como primer número de índice para matrices que declaran sólo el índice superior. Si esta declaración está presente, las siguientes declaraciones son idénticas, ambas declarando un arreglo de 100 elementos:

Dim MyArray (1 a 100) Como IntegerDim MyArray (100) Como Integer

Matrices multidimensionales

Los arreglos creados en los ejemplos anteriores son todos arreglos unidimensionales. Piense en matrices unidimensionales como una sola línea de valores. Los arreglos que se crean en VBA pueden tener hasta 60 dimensiones, aunque rara vez se necesitan más de dos o tres dimensiones en un arreglo. El siguiente ejemplo declara un array de 81 enteros con dos dimensiones:

Dim MyArray (1 a 9, 1 a 9) Como un número entero

Puedes pensar en este arreglo como si ocupara una matriz de 9 x 9 – perfecto para almacenar todos los números en un rompecabezas de Sudoku.

Para referirse a un elemento específico de este array, es necesario especificar dos números de índice (similar a su «fila» y su «columna» en la matriz). El siguiente ejemplo muestra cómo puede asignar un valor a un elemento de este array:

MyArray (3, 4)= 125

Esta sentencia asigna un valor a un solo elemento del array. Si está pensando en el arreglo en términos de una matriz de 9 x 9, esto asigna 125 al elemento ubicado en la tercera fila y la cuarta columna de la matriz.

He aquí cómo declarar una matriz tridimensional, con 1.000 elementos:

Dim My3DArray (1 a 10, 1 a 10, 1 a 10, 1 a 10) Como un número entero

Puedes pensar en una matriz tridimensional como un cubo. Visualizar una matriz de más de tres dimensiones es más difícil.

Matrices dinámicas

También puede crear arreglos dinámicos. Un arreglo dinámico no tiene un número preestablecido de elementos. Declarar un arreglo dinámico con un conjunto vacío de paréntesis:

Dim MyArray () Como un número entero

Antes de poder usar este array, debe usar la sentencia ReDim para indicar a VBA cuántos elementos tiene el array. Normalmente, el número de elementos en la matriz se determina mientras se ejecuta el código. Puede utilizar la sentencia ReDim cualquier número de veces, cambiando el tamaño del array tantas veces como sea necesario. El siguiente ejemplo muestra cómo cambiar el número de elementos en un arreglo dinámico. Asume que la variable NumElements contiene un valor que su código ha calculado.

ReDim MyArray (1 a NumElements)

Cuando redimensiona un array usando ReDim, borra cualquier valor actualmente almacenado en los elementos del array. Puede evitar la destrucción de los valores antiguos utilizando la palabra clave Conservar. El siguiente ejemplo muestra cómo puede preservar los valores de un array cuando redimensiona el array:

ReDim Preserve MyArray (1 a NumElements)

Si MyArray tiene actualmente diez elementos, y se ejecuta la sentencia anterior con NumElements igual a 12, los primeros diez elementos permanecen intactos, y el array tiene espacio para dos elementos adicionales (hasta el número contenido en la variable NumElements). Sin embargo, si NumElements es igual a 7, los primeros siete elementos se conservan, pero los tres elementos restantes se encuentran en proceso de desaparición.

Leave a Comment

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