Transfiriendo Rangos desde Hoja en Excel a Arreglos en VBA

Un rango en Excel puede ser transformado en un arreglo (Array) y utilizar las ventajas que proporcionan este tipo de variables.

Un arreglo (Array) permite almacenar múltiples datos bajo un mismo nombre de variable, y a la vez permite referirse a cada elemento en forma individual utilizando un índice.

Por ejemplo, si queremos referirnos a los elementos de una lista de valores, la cual llamaremos Xval.

Dim Xval()    ‘ Crea un Arreglo con nombre Xval

Xval(0)=10    ‘ Asigna el valor 10 al elemento Xval(0)

Xval(1)=15     ‘ Asigna el valor 15 al elemento Xval(1)

Xval(2)=20   ‘ Asigna el valor 20 al elemento Xval(2)

Aquí hemos creado un arreglo Xval y le hemos asignado valores a sus elementos valor por valor.

Pasando un Rango a un Procedimiento creando un objeto Range

Para pasar un rango a un array en un procedimiento podemos crear un objeto Range, y este se comportará como un array.

Este array tiene como base 1, en lugar de 0. Es decir, el índice inferior es 1 (Lowerbound=1).

Creamos la variable AX como un objeto Range y luego hacemos la variable AX igual al Rango que queremos leer, creando un objeto Range que funciona como un arreglo (array).

Para leer un Rango y transformarlo en un objeto Range

Dim AX as Range

Set AX=Range(“B4:B13”)

clip_image002

Si queremos regresar el arreglo a la hoja de Excel, tenemos que seleccionar un rango de celdas y hacerla igual al nombre del arreglo.

Hay que colocar paréntesis vacíos luego del nombre del arreglo para referirse al arreglo, si no se colocan los paréntesis vacíos no reconoce el nombre del arreglo.

Range (“E4:E13”)=AX()

Range(“E4:E13”)=AX ‘Sin paréntesis no funciona

Cada elemento del arreglo puede ser accesado individualmente su índice.

AX(1)=10

AX(2)=20

Pasando un Rango a un Procedimiento Asignando el Rango a una Variable

Es posible asignar un Rango a una variable dentro de un procedimiento Sub en VBA, esta se comporta de forma “limitada” como un arreglo.

Por ejemplo

AY = Range(“B4:B13”)

clip_image004

La variable puede utilizarse para referirse al rango completo, Hay que utilizar el nombre de la variable, sin colocar paréntesis. Si se coloca paréntesis no funciona.

Range(“E4:E13”) = AY

Range(“E4:E13”) = AY() ‘No funciona si se colocan paréntesis

incluso puede utilizarse la función Transpose para cambiar la orientación del rango.

Range(“B18:K18”) = WorksheetFunction.Transpose(AY)

Pero no puede referirse a cada elemento en particular. Si tratamos de referirnos a un elemento en particular como si fuese un arreglo, por ejemplo AY(1) genera un error.

Se puede utilizar la función Ubound(AY) y funciona bien. Sin embargo, no reconoce los índices cuando se indican, dando un mensaje de error.

clip_image005

Sin embargo, de acuerdo a Billo (Billo, 2007), los valores de los elementos pueden ser accesado en la misma forma que un arreglo verdadero. Podría ser que esto funcionara para las versiones anteriores de VBA, pero no para la versión actual que acompaña a Excel 2016.

En lugar de un rango también puede utilizarse el nombre de un rango con el mismo efecto.

AZ=Range(“mirango”)

Asigna el nombre “mirango” a la variable AZ

clip_image007

Pasando Rangos como argumentos de Funciones

Si un Rango es pasado como argumento de una función en VBA, este se comportará como un arreglo, es decir puede accesarse a cada elemento con el nombre del arreglo y un índice entre paréntesis. No se requiere utilizar el comando Dim.

Por ejemplo, hagamos una función sencilla que calcule la suma de todos los elementos de un rango.

clip_image009

El parámetro Xs de la función SumaRange recibe como argumento el rango que se ha seleccionado, en este caso Range(“B4:B13”). Dentro del procedimiento Xs actúa como un arreglo (Array).

La declaración de la variable as Range no es necesaria, como se demuestra en el siguiente ejemplo.

Public Function PromedioRango(Ys)

suma = 0

Promedio = 0

n = Ys.Count

For i = 1 To n

suma = suma + Ys(i)

Next i

Promedio = suma / n

PromedioRango = Promedio

End Function

 

 

Referencias Bibliográficas

Billo, E. J. (2007). Excel for Scientists and Engineers, Numerical Methods. Wiley-Interscience.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s