Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

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

8 comentarios

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 34.203.221.104
Proxy: 34.203.221.104
Remote host: ec2-34-203-221-104.compute-1.amazonaws.com
Remote port: 49318
** 34.203.221.104