VBA – Array Multidimensional (Arrays 2D)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on abril 4, 2022

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.

Rango relleno desde array

 

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.

Error redim 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.

Error redim preserve debug

 

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