VBA ReDim - Manejar matrices dinámicas usando VBA ReDim Preserve

Declaración de Excel VBA ReDim

La declaración VBA Redim es similar a la declaración dim, pero la diferencia es que se usa para almacenar o asignar más espacio de almacenamiento o disminuir el espacio de almacenamiento que tiene una variable o una matriz, ahora hay dos aspectos importantes que se usan con la declaración Preserve, si preserve se usa con esta declaración, entonces crea una nueva matriz con un tamaño diferente y si no se usa preserve con esta declaración, simplemente cambia el tamaño de la matriz de la variable actual.

Las matrices son una parte importante de la codificación de VBA. Usando matrices, podemos almacenar más de un valor en la misma variable que definimos. Como declaramos la variable usando la palabra "Dim", también necesitamos declarar el nombre de la matriz usando "Dim".

Para declarar el nombre de la matriz, primero debemos identificar el tipo de matriz que vamos a definir. En matrices, tenemos 5 tipos.

  1. Matriz estática
  2. Matriz dinámica
  3. Matriz unidimensional
  4. Matriz bidimensional
  5. Matriz multidimensional

En la matriz estática en Excel, decidiremos el valor inferior y el valor superior de la matriz con mucha anticipación mientras declaramos la variable. Por ejemplo, mire el siguiente ejemplo.

Código:

Sub ReDim_Example1 () Dim MyArray (1 a 5) como sub de fin de cadena

Aquí MyArray es el nombre de la matriz, que puede contener el valor de 1 a 5. MyArray puede contener 5 resultados diferentes como el siguiente.

Código:

Sub ReDim_Example1 () Dim MyArray (1 a 5) As String MyArray (1) = "Hola" MyArray (2) = "Buen" MyArray (3) = "Mañana" MyArray (4) = "Tener un" MyArray (5) = "Buen día" End Sub

Matriz dinámica con declaración ReDim

Pero en la matriz dinámica, este no es el caso. No decidiremos el valor inferior y el valor superior con mucha antelación; más bien, simplemente definimos el nombre de la matriz y asignamos el tipo de datos.

Sub ReDim_Example1 () Dim MyArray () As String End Sub

Para que el nombre de la matriz sea dinámico, primero debemos declararlo con la palabra "Dim", pero no decidamos el tamaño de la matriz con mucha anticipación. Simplemente nombramos una matriz con valores vacíos dentro del paréntesis (). Cuando la matriz no incluye el tamaño, se trata como una matriz dinámica.

Dim MyArray () como cadena

En el momento en que mencionas el tamaño de la matriz dentro del paréntesis, se convierte en una matriz estática. Atenuar MyArray (1 a 5) como cadena

En la matriz dinámica, siempre cambiamos el tamaño de la matriz usando la palabra "ReDim" en la siguiente línea del código.

ReDim MyArray (1 a 6) como cadena

Cualquier valor almacenado en el nombre de la matriz en los pasos anteriores, es decir, usando la instrucción "Dim", permanece nulo, y el tamaño que declaramos usando "ReDim" se convierte en el nuevo tamaño de la matriz.

Ejemplos para usar VBA Redim Statement

Ejemplo 1

Eche un vistazo al ejemplo del uso de la declaración "ReDim" de manera práctica. Siga los pasos a continuación para aplicar "ReDim".

Paso 1: primero cree un nombre de macro.

Paso 2: declare un nombre de matriz como una cadena.

Código:

Sub ReDim_Example1 () Dim MyArray () As String End Sub

Paso 3: Ahora use la palabra "Redim" y asigne el tamaño de la matriz.

Código:

Sub ReDim_Example1 () Dim MyArray () Como cadena ReDim MyArray (1 a 3) End Sub

Paso 4: Ahora el nombre de la matriz "MyArray" puede contener hasta 3 valores aquí. Asigne el valor a estas 3 matrices como la siguiente.

Código:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 a 3) MyArray (1) = "Bienvenido" MyArray (2) = "a" MyArray (3) = "VBA" End Sub

Entonces, la primera matriz es igual a la palabra "Bienvenido", la segunda matriz es igual a la palabra "a" y la tercera matriz es igual a la palabra "VBA".

Paso 5: Ahora almacena estos valores de matriz en celdas.

Código:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 a 3) MyArray (1) = "Bienvenido" MyArray (2) = "a" MyArray (3) = "VBA" Rango ("A1"). Valor = MyArray (1) Rango ("B1"). Valor = MyArray (2) Rango ("C1"). Valor = MyArray (3) End Sub

Paso 6: Si ejecuta este código, deberíamos tener estos valores en las celdas A1, B1 y C1, respectivamente.

Ejemplo n. ° 2: cambiar el tamaño del arreglo mientras se recuerdan los valores anteriores.

Una vez que se asignan valores al nombre de la matriz, también podemos cambiar el tamaño en cualquier momento del procedimiento utilizando la palabra "ReDim Preserve".

Assume you have already declared an array name and assigned values to those array name like the below one.

Now you would like to increase the array length by 2, i.e., 5. In this case, we can use the word VBA “ReDim Preserve” to resize the array length to remember the old values as well.

Code:

Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now we can assign two more values to the array.

Code:

Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now store these values in cells.

Code:

Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now run the macro and see what happens.

So we got the new word in the D1 cell.

La razón por la que necesitamos usar la palabra "preservar" porque la matriz debe recordar los valores antiguos de la matriz en el procedimiento.

En el momento en que ignore la palabra "preservar", no recordará los valores antiguos.

Cosas para recordar aquí

  • ReDim solo puede contener el último valor de la matriz, no los muchos valores. Por ejemplo, no podemos utilizar este código "ReDim Preserve MyArray (4 a 5)". Esto arrojará el error.
  • No podemos ReDim matrices estáticas. En el momento en que asigna el tamaño de la matriz dentro del paréntesis, se convierte en una matriz estática.
  • Usando ReDim, no podemos cambiar el tipo de datos. La matriz puede contener cualquier tipo de datos que hayamos asignado al declarar la matriz.

Articulos interesantes...