VBA – Array dinámico (Redim y Redim Preserve)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on abril 4, 2022

Este tutorial demostrará cómo utilizar arrays dinámicos (redim y redim preserve) en VBA.

Arrays dinámicos

Los Arrays dinámicos son Arrays que pueden cambiar de tamaño (a diferencia de los arrays estáticos, que son estáticos). Para declarar un array dinámico, se declara el array, pero se omite el tamaño del mismo:

Dim strNombres() As String

Luego, antes de asignar valores a su matriz, debe utilizar la sentencia ReDim para establecer la matriz al tamaño deseado:

ReDim strNombres(1 a 3)

Ahora, cada vez que quieras cambiar el tamaño de tu array, simplemente usa ReDim (o ReDim Preserve como aprenderemos más adelante).

Arrays dinámicos de variantes

Nota: Los Arrays variantes son un poco diferentes. Con los arrays variantes, no es necesario establecer el tamaño del array con ReDim antes de asignar los valores.

Sub ProbarArray()
'Declarar la variable
    Dim varNombres() As Variant
'Llenar el array
    varNombres() = Array("Fred", "Wilma", "Barney", "Betty")
'Devolver los valores
    MsgBox Join(varNombres, ",")
End Sub

Redim vs. Redim Preserve

La sentencia ReDim redimensiona un array, borrando todos los valores existentes. La sentencia ReDim Preserve redimensiona un array, manteniendo («preservando») todos los valores existentes.

Uso de ReDim

En la práctica, redimensionar un array con ReDim tiene el siguiente aspecto:

Sub ProbarRedim()
'Declarar el Array de cadenas
   Dim strNombres() As String
'redimensionar el array de cadenas para que pueda contener 3 valores
   ReDim strNombres(1 To 3)
'rellenar el array con 3 nombres
   strNombres(1) = "Mel"
   strNombres(2) = "Steve"
   strNombres(3) = "Bob"
'mostrar el resultado en la ventana inmediato
   Debug.Print Join(strNombres, vbCrLf)
End Sub

Probar array ventana inmediato

 

Usando ReDim Preserve

En este ejemplo, usaremos ReDim para establecer el array dinámico inicial y luego ReDim Preserve para redimensionar el array, manteniendo los valores originales:

Sub PruebaRedimPreserve()
'declarar el array de cadenas
   Dim strNombres() As String
'redimensionar el array de cadenas para que pueda contener 3 valores
   ReDim strNombres(1 To 3)
'rellenar el array
   strNombres(1) = "Mel"
   strNombres(2) = "Steve"
   strNombres(3) = "Bob"
'mostrar el resultado en la ventana inmediato
   Debug.Print Join(strNombres, vbCrLf)
'redim pero preservar los datos
   ReDim Preserve strNombres(1 To 4)
   strNombres(4) = "Fred"
'mostrar el resultado en la ventana inmediato
   Debug.Print Join(strNombres, vbCrLf)
End Sub

Ventana inmediato

 

Si no utiliza la sentencia PRESERVE, perderá los datos que había en el array anteriormente.

Redim sin preserve

 

En la ventana inmediata anterior, el array llenaba a Mel, Steve y Bob. Cuando se re-declaró, eliminó esos valores y en su lugar devolvió 3 valores en blanco y luego el valor ‘Fred’. Esto se debe a que se omitió la sentencia PRESERVE.

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples