VBA – Array dinámico (Redim y Redim Preserve)
In this Article
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
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
Si no utiliza la sentencia PRESERVE, perderá los datos que había en el array anteriormente.
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.