VBA ReDim

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" de manera similar, necesitamos declarar el nombre de la matriz usando "Dim" también.

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 final 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, sino que 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 menciona el tamaño de la matriz dentro del paréntesis, se convierte en una matriz estática. Dim 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

Puede descargar esta plantilla de Excel de VBA ReDim aquí - Plantilla de Excel de VBA ReDim

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: cambie el tamaño del arreglo mientras recuerda los valores anteriores.

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

Suponga que ya ha declarado un nombre de matriz y asignado valores a esos nombres de matriz como el siguiente.

Ahora le gustaría aumentar la longitud de la matriz en 2, es decir, 5. En este caso, podemos usar la palabra VBA "ReDim Preserve" para cambiar el tamaño de la longitud de la matriz para recordar también los valores antiguos.

Código:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Bienvenido" MyArray (2) = "a" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Carácter 1" Rango ("A1"). Valor = MyArray (1) Rango ("B1"). Valor = MyArray (2) Rango ("C1"). Valor = MyArray (3) Rango ("D1"). Valor = MyArray (4) End Sub 

Ahora podemos asignar dos valores más a la matriz.

Código:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Bienvenido" MyArray (2) = "a" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Carácter 1" Rango ("A1"). Valor = MyArray (1) Rango ("B1"). Valor = MyArray (2) Rango ("C1"). Valor = MyArray (3) Rango ("D1"). Valor = MyArray (4) End Sub 

Ahora almacena estos valores en celdas.

Código:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Bienvenido" MyArray (2) = "a" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Carácter 1" Rango ("A1"). Valor = MyArray (1) Rango ("B1"). Valor = MyArray (2) Rango ("C1"). Valor = MyArray (3) Rango ("D1"). Valor = MyArray (4) End Sub 

Ahora ejecuta la macro y mira qué pasa.

Así que tenemos la nueva palabra en la celda D1.

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 can only hold the last value of the array, not the many values. For example, we cannot use this code “ReDim Preserve MyArray(4 to 5)”, this will throw the error.
  • We cannot ReDim static arrays. The moment you assign the size of the array inside the parenthesis it becomes a static array.
  • Using ReDim we cannot change the data type. The array can hold whatever the data type we have assigned while declaring the array.