Hola a todos!:
En esta web hay varios post dedicados a los listbox, tanto en formularios como objetos en la hoja. En el post de hoy me gustaría mostrar un código en el que vamos a ver un método para cargar los datos en nuestro listbox y también para ordenarlos.
Imaginad los siguientes datos:
Tenemos un listado de nombres y apellidos y nuestro objetivo es pasar al listbox los datos seleccionados y ordenarlos.
Veamos el código que os propongo:
Sub ORDENAR_LIST()
'Definimos variables
Dim MiMatriz As Object, Celda As Variant, nItem As Variant
'Vaciamos listbox
Call BORRAR
With Sheets("ORDENAR")
'Creamos objeto ArrayList
Set MiMatriz = CreateObject("System.Collections.ArrayList")
'Pasamos los datos seleccionados al ArrayList
'Si la celda está vacía, no la tenemos en cuenta
'Formateamos el contenido de cada celda como texto
For Each Celda In Selection
If Not IsEmpty(Celda) Then MiMatriz.Add CStr((Celda))
Next Celda
'Ordenamos
MiMatriz.Sort
'Pasamos la información al listbox
For Each nItem In MiMatriz
.ListBox1.AddItem (nItem)
Next nItem
End With
End Sub
Sub BORRAR()
With Sheets("ORDENAR")
'Limpiamos combo y listbox
.ListBox1.Clear
End With
End Sub
Como podéis observar, vamos a trabajar con la selección como un rango de datos. Para ello tendremos que crear el objeto arraylist que nos permitirá ordenar la información de menor a mayor con el método .Sort.
Básicamente, con una instrucción For – Each vamos pasando cada elemento de la selección a nuestro arraylist (en este ejemplo no tendremos en cuenta las celdas vacías) y además damos formato texto a cada valor de las celdas seleccionadas (CStr) evitando así errores de tipos y también en el método Sort a la hora de comparar los datos para la ordenación. (Ojo con los números, que ordena de forma distinta al orden habitual).
Una vez pasados los datos, ordenamos. Si quisiéramos invertir el orden, simplemente tendríamos que incluir una nueva línea debajo del .Sort:
MiMatriz.Reverse
Una vez que lo tenemos, solo tenemos que pasar los datos al listbox mediante otro For-Each.
El resultado es para los nombres:
Espero que os haya resultado de interés!.
Descarga el archivo de ejemplo pulsando en: ORDENAR ELEMENTOS DE UN LISTBOX UTILIZANDO OBJETO ARRAYLIST
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies