Aprenderemos algunos aspectos de este curioso objeto ArrayList, que es una estructura de datos muy útil cuando queremos trabajar con rangos dinámicos, pero queremos evitar la molestia de tener que redefinir (Redim) constantemente el tamaño del rango o array.
Los ArrayList no tienen un tamaño fijo, por lo que podemos seguir agregándole elementos constantemente.
A pesar de esta ventaja, en VBA suelo recomendar utilizar la colección -Collection...
Supongamos tenemos una tabla ('TblCiudad') con unas ciudades listadas que deseamos ordenar...
Insertamos un módulo estándar, y en esta ventana de código añadiremos nuestra macro:
Curiosa la propiedad .ToArray de este objeto que traslada o transforma los elementos de éste en una array 'normal'.
Otra propiedad muy habitual es .Add que añade elementos al objeto.
También las propiedades .Sort o .Reverse para ordenar en ascendente y descendente, respectivamente, los elementos del objeto.
El resultado final, tras ejecutar la macro, es el esperado...
Los ArrayList no tienen un tamaño fijo, por lo que podemos seguir agregándole elementos constantemente.
A pesar de esta ventaja, en VBA suelo recomendar utilizar la colección -Collection...
Supongamos tenemos una tabla ('TblCiudad') con unas ciudades listadas que deseamos ordenar...
Insertamos un módulo estándar, y en esta ventana de código añadiremos nuestra macro:
Sub Ordenar() Dim arr As Object 'declaramos nuestra ArrayList 'y la matriz con la que trabajaremos Dim arrTrabajo() As Variant, arrOrdenada() As Variant Dim rngCiudades As Range Set rngCiudades = Hoja1.Range("TblCiudad[Ciudades]") 'creamos el objeto ArrayList Set arr = CreateObject("System.Collections.ArrayList") 'cargamos la matriz con los valores del rango arrTrabajo = rngCiudades 'añadimos los elementos del rango al ArrayList For Each elto In arrTrabajo arr.Add elto Next elto 'ordenamos el objeto en Ascendente arr.Sort 'podríamos ordenar el objeto en Descendente 'arr.Reverse 'Reconvertimos en una Array 'normal' el objeto ArrayList ya ordenado 'y lo almacenamos en una nueva Array arrOrdenada = arr.ToArray 'finalmente llevamos a la tabla los valores ya ordenados... For i = 1 To arr.Count rngCiudades.Item(i).Value = arrOrdenada(i - 1) Next i 'También podríamos haber hecho 'Range("ndCiudades").Value = Application.Transpose(arrOrdenada) End Sub
Curiosa la propiedad .ToArray de este objeto que traslada o transforma los elementos de éste en una array 'normal'.
Otra propiedad muy habitual es .Add que añade elementos al objeto.
También las propiedades .Sort o .Reverse para ordenar en ascendente y descendente, respectivamente, los elementos del objeto.
El resultado final, tras ejecutar la macro, es el esperado...
la palabra elto o variable donde la declaras?? es que me marca error
ResponderEliminarHola qué tal?
Eliminarun placer saludarte y poder ayudarte.
No está declarada porque no he trabajado con variables requeridas (con Option Explicit), quizá es tu caso y por esto te falla
Un cordial saludo
Si la declaró sería de tipo variant o elto que significa ?
EliminarHola de nuevo,
Eliminarun placer poder responder tus dudas.
'elto' es una parte de objeto 'arrTrabajo', por tanto son las celdas de un rango
Saludos cordiales