martes, 21 de noviembre de 2017

Trabajo con arrays en VBA para Excel


Un array (arreglo, matriz o composición ordenada) es una variable que puede almacenar y gestionar varios valores colocándolos en la memoria RAM de nuestro equipo en forma de matriz. Los arrays pueden tener una disposición matricial de una dimensión (como una simple lista de elementos), de dos dimensiones (en modo tabla, donde las filas son una de las dimensiones y las columnas la otra), pero también pueden tener una disposición en tres dimensiones (como un cubo) o incluso en n dimensiones.




En Excel, en la mayoría de casos se trabaja con arrays de 1 o de 2 dimensiones, Por ejemplo:




Los arrays se suelen utilizar para procesar grandes cantidades de datos de forma muy rápida. Están indicados en los casos en los que la información que hay en un conjunto de datos (normalmente un rango de Excel) debe ser procesada (reorganizada, calculada, modificada, etc.).

La filosofía de trabajo con un array debe ser clara:
  1. Crear el array
  2. Asignar valores (llenar el array) con la información (normalmente se hace mediante bucles For...Next)
  3. Volcar la información en un rango de Excel o en un objeto
1. Crear un array

OPCIÓN A). Solo declarar el array (y después dimensionarlo)

Por ejemplo:

   Dim miArray() As TipoDato
   ReDim miArray(miVariable, 7)

... o también...
   Dim miArray() As TipoDato
   ReDim miArray(3, Range("A1"))
 
Esta opción se utiliza cuando el número de elementos de cada dimensión no es conocido en el momento de escribir la línea de la declaración. Un ejemplo de esto es cuando ese número de elementos deben ser variables, constantes o referencias a rangos de Excel. Hay que tener en cuenta que, en principio, solo es posible dimensionar un array con un par de números. Es decir, el código siguiente no sería admitido:

   Dim miArray(miVariable,4) As Integer

Así pues, esta Opción A (como hemos visto anteriormente) consistiría en declarar el array con la instrucción Dim y posteriormente, dimensionarla con ReDim... ¡¡Qué SÍ permite variables, constantes y referencias a celdas!!.

 OPCIÓN B). Declarar el array y dimensionarlo al mismo tiempo

Por ejemplo:

   Dim miArray(6,3) As Integer

2. Asignar valores al array (llenarlo)

OPCIÓN A). Posición a posición con líneas de código

Por ejemplo:

   miArray(2,3) = Range("A1")
   miArray(4,3) = 836

OPCIÓN B). Posición a posición mediante un bucle

Por ejemplo:

   Dim miArray(6) As String

   For i = 1 To 6
      miArray(i) = i
   Next i

En esta fase de llenado o asignación de valores al array es cuando se puede procesar la información al mismo tiempo que se produce el llenado. Por ejemplo:

   Dim miArray(6) As String

   For i = 1 To 6
      miArray(i) =Left(Cells(i, 3)) & "-" & Right(Cells(i, 4))
   Next i

Con el código de arriba se llena la única columna de miArray* con los 3 caracteres de la izquierda de los datos que hay en las 6 primeras celdas de columna 3 de Excel, más un guion, más los 3 caracteres de la derecha que hay en las 6 primeras celdas de la columna 4 de Excel.

*Trabajando con arrays de una sola dimensión (una sola columna o fila) no es necesario especificar un par (x, y)

3. Volcar la información

Una vez que el array está lleno con la información procesada (si hubiera sido necesario), lo normal es volcar los datos en un Rango de Excel o en un objeto, como puede ser un combo - box o un cuadro de lista de un UserForm. Un ejemplo del primer caso sería:

Range("A1:A6")  = miArray

¡¡Atención!!, el rango destino debe tener el mismo tamaño (filas x columnas) que el array.
Otra cuestión que podemos apreciar en la última línea de código de ejemplo es que, al hacer referencia al array de forma global (no por posiciones), no es necesario aludir al par (x, y).



Los arrays tienen algunas ventajas frente a las variables - matriz:
  1. Los arrays pueden ser dimensionados para cualquier tipo de dato, no solo el tipo variant.
  2. Los arrays pueden ser llenados de valores uno a uno (posición a posición) desde la primera vez que se les asignan valores. Recordemos que las variables-matriz deben ser llenadas en bloque desde un rango de celdas de Excel.
  3. Los arrays pueden tener más de 2 dimensiones y, además, estas pueden ser variables, referencias a rangos, constantes, etc.

José Manuel Pomares Medrano











No hay comentarios:

Publicar un comentario