Excel.Macros: Los arrays

Cuando estamos escribiendo macros, nos sale muy a menudo  utilizar lista de datos, o bien movernos por un conjunto de datos sin volver a la hoja, o queremos añadir una lista, o queremos cambiar la secuencia de clasificación, o…..

Todas esas necesidades se pueden resolver con el uso de los array.

Aunque el sistema que utiliza VBA para la definición de los arrays no es demasiado elegante, la funcionalidad de los mismos justifican sobradamente su uso.

Primero veamos como definimos un array, si conocemos su contenido, podemos llenarlo directamente

Dim lista As Variant
lista = Array(“cero”, “uno”, “dos”, “tres”, “cuatro”, “cinco”, “seis”, “siete”, “ocho”, “nueve”)

Lista que dará como un array de 10 elemento que podemos recorrer con

Dim a As Integer
For a = 0 To UBound(lista)
Debug.Print lista(a)
Next a

Ahora, si p.ej: en A1 nos introducen un numero del 0 al 9, podemos pasarlo a letras con

MsgBox lista(Range(“A1”).value)

Creo que el disponer de esta funcionalidad ya esta bién, pero… también nos sirve para añadir una lísta a nuestra hoja

Application.AddCustomList lista

Esto nos añade una lista con los valores del array, que podemos empezar a utilizar desde la entrada…

Si el uso de la lista es para un momento concreto, y deseamos hacerla desaparecer, solo tendremos que habernos guardado el número con el que se creó, añadiendo a continuación de la creación.

Dim numlis As Integer
numlis = Application.CustomListCount

y cuando queramos borrarla, podremos hacer

Application.DeleteCustomList numlis

y… como si nunca hubiera existido.

Si necesitáis que vuestra lista aparezca en la hoja, podéis hacerlo con un bucle, o con:

 Range(“a1:a10”).Value = Application.WorksheetFunction.Transpose(lista)

Que nos hará que salga en el rango indicado, en vertical; pero si lo queréis en horizontal, todavía mas fácil:

 Range(“B1:K1”).Value = lista

Si, ver como aparece vuestra lista en las celdas indicadas. Ah, si dais menos celdas, solo aparecerá los elementos de la lista que se puedan escribir…

Y si el array ya lo tenéis escrito en la hoja, también lo podéis tener en memoria; otra vez podéis optar por un bucle y lectura secuencial, o el sistema mas rápido

Dim myarray As Variant
myarray = Range(“a1:a10”).Value

y el contenido del rango indicado, va a parar a un array. Si el rango es de mas columnas, también funciona, generándose en memoria una matriz del número de elementos (alto y ancho) que contenga el rango.

A continuación os presento otro ejemplo de como generar una matriz de dos dimensiones, y moverla a la hoja

Dim lista As Variant

lista = Array("cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve")

   Set ws = Worksheets.Add
    Dim yourarray(4, 6) As Variant
    For a = 0 To 3
        For b = 0 To 4
            yourarray(a, b) = lista(a) & "-" & lista(b)
        Next b
    Next a
    ws.[A1].Resize(UBound(yourarray, 1), UBound(yourarray, 2)).Select
    ws.[A1].Resize(UBound(yourarray, 1), UBound(yourarray, 2)).Value = yourarray

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Excel, Formacion y etiquetada , , . Guarda el enlace permanente.

Deja un comentario