VBA – Array Multidimensional (Arrays 2D)
In this Article
Este tutorial discutirá los arrays bidimensionales y multidimensionales en VBA.
Arrays Multidimensionales (Arrays 2D)
Los Arrays multidimensionales son arrays que contienen más de una dimensión, normalmente dos o tres dimensiones, pero los arrays pueden tener hasta 32 dimensiones.
Declarar un Array 2D
Para crear un array con más de una dimensión, utilice comas para definir cada dimensión por separado:
Dim intArr(2,3) as Integer
Rellenar un Array 2D
El código siguiente rellenará un array 2D, y luego rellenará las filas y columnas de una hoja de cálculo con los valores del array.
Sub Rellenar_2D()
'Declarar el Array 2D
Dim intA(2, 3) As Integer
'Declarar variables
Dim rw As Integer
Dim col As Integer
'Rellenar el array
intA(0, 0) = 45
intA(0, 1) = 50
intA(0, 2) = 55
intA(0, 3) = 60
intA(1, 0) = 65
intA(1, 1) = 70
intA(1, 2) = 75
intA(1, 3) = 80
intA(2, 0) = 85
intA(2, 1) = 90
intA(2, 2) = 95
intA(2, 3) = 100
'Recorrer el Array y rellenar rango de Excel
For rw = 0 To 2
For col = 0 To 3
Cells(rw + 1, col + 1).Value = intA(rw, col)
Next col
Next rw
End Sub
Su hoja de cálculo de Excel debería entonces llenarse como sigue.
Rellenando un Array 2D desde los datos de Excel
El código siguiente rellenará un array 2D desde una hoja de cálculo de Excel y luego rellenará una hoja diferente con los datos.
Sub Rellenar_2D()
'Declarar las hojas de trabajo
Dim ws_Source As Worksheet
Dim ws_Destination As Worksheet
'Declarar el array
Dim wsData(10, 3) As Variant
'Declarar las variables
Dim rw As Integer
Dim col As Integer
'Asignar el origen de datos a la variable
Set ws_Source = Worksheets("Hoja1")
'obtener la información de la hoja de origen y rellenar el array
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
wsData(rw, col) = ws_Source.Range("A1").Offset(rw, col).Value
Next col
Next rw
'Asignar hoja destino a variable
Set ws_Destination = Worksheets("Hoja2")
' rellenar la hoja de destino a partir del Array
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
ws_Destination.Range("A1").Offset(rw, col).Value = wsData(rw, col)
Next col
Next rw
End Sub
Redimensionamiento con ReDim y Re-Dim Preserve
Puedes redimensionar un array usando ReDim (aprende más).
Sub Redimensionar_2D()
'declarar el array
Dim varArray() As Variant
'declarar el tamaño del array
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'redeclarar el tamaño del array
ReDim varArray(0, 1)
'Rellenar el array nuevamente
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
End Sub
Cuando vuelvas a declarar el array, perderás cualquier dato que haya quedado previamente en el array, a menos que utilices la sentencia ReDim Preserve.
Sub Redimensionar_2D_Preserve()
'declarar el array
Dim varArray() As Variant
'declarar el tamaño del array
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'Redeclarar el tamaño del array
ReDim Preserve varArray(1, 3)
'Rellenar el array con valores adicionales
varArray(0, 3) = "Rob Barnes"
varArray(1, 3) = "Plumber"
End Sub
Sólo puedes redimensionar la última dimensión de un Array si quieres mantener los datos originales en el Array con Re-Dim Preserve.
Cuando haga clic en debug, el error se resaltará mostrando que la primera dimensión en el array no es la misma que la primera dimensión cuando el tamaño del array fue declarado originalmente.