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
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.
8 comentarios
¿Cómo elimino 12 hojas ocultas con diferentes nombres con macro?
Si previamente conoces los nombres, solo tienes que seleccionarlas una a una….