6 febrero, 2025

ORDENAR ELEMENTOS DE UN LISTBOX UTILIZANDO OBJETO ARRAYLIST

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:

ORDENAR ELEMENTOS DE UN LISTBOX UTILIZANDO OBJETO ARRAYLIST

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:

 

 

ORDENAR ELEMENTOS DE UN LISTBOX UTILIZANDO OBJETO ARRAYLIST_1

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.

Donate Button with Credit Cards

¡¡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

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

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