Ordenar datos en un combo

24/10/2005 - 17:45 por cuejorge2003 | Informe spam
Buen día,

Tengo un combo al cual se le agregan los datos de una columna y
funciona perfectamente.

Ahora, me gustaría que los datos aparecieran ordenados... se puede ?
Anexo código que utilizo.


Dim Celda As Range, Listado As New Collection, Sig As Integer
Dim Origen As Object
Set Origen = Worksheets("INTERF").Cells(1, 7).Resize _
(Worksheets("INTERF").Cells(1, 7).CurrentRegion.Rows.Count -
1).Offset(1, 0)
For Each Celda In Origen.SpecialCells(xlCellTypeVisible)
On Error Resume Next
Listado.Add Celda, CStr(Celda)
Next
UserForm2.ComboBox1.Clear
For Sig = 1 To Listado.Count
Listado.Item (Sig)
UserForm2.ComboBox1.AddItem Listado.Item(Sig)
Next


De antemano, gracias.
Un saludo.
Jorge

Preguntas similare

Leer las respuestas

#6 cuejorge2003
25/10/2005 - 17:30 | Informe spam
Roberto,

Gracias por tu apoyo !!!

Lo hago de esa manera y hay también un código que pasó Héctor, pero
el problema es que son 6 diferentes columans de una base de datos de 29
columnas y mas de 20,000 renglones.
Toma mucho tiempo y si solo cargo el combo y lo ordeno en caso que
se pueda, pues creo que sería mas rápido.

De nuevo... Muchas gracias !!!
Un saludo.
Jorge
Respuesta Responder a este mensaje
#7 Hernandez, Roberto
25/10/2005 - 17:47 | Informe spam
Creo yo que entonces tienes que hacer una búsqueda, un corrimiento y una
inserción;
no creo que un BubbleSort o un Quicksort sean más rápidos que la ordenación
de XL... Y sí, tendría que ser en memoria para no 'mover' tanta
información... Deja ver que tengo por aquí...


"Juan" escribió en el mensaje
news:%
hola jorge

mira a ver si la respuesta que dio hector a una consulta de ordenar un
combox

http://tinyurl.com/c3du7

si no es exactamente lo que quieres, puedes utilizar metodos tradicionales
de ordenacion como el burbuja o quicksort para ordenar tu vector una vez
lo tengas en memoria, o utilizar el metodo sort de excel para rangos, que
como no quieres midificar tu tabla de datos puedes copiar a otra, hoja y
allli realizar la ordenacion

un saludo
juan



Respuesta Responder a este mensaje
#8 cuejorge2003
25/10/2005 - 17:49 | Informe spam
Roberto,

De verdad agradezco mucho tus atenciones.

Muchísimas gracias !!!
Un saludo.
Jorge
Respuesta Responder a este mensaje
#9 Héctor Miguel
25/10/2005 - 18:25 | Informe spam
hola, jorge !

Me puedes, por favor, pasar la forma de hacerlo con burbuja o quicksort ?



la adaptacion del enlace que te sugiere Juan esta al final del presente ;)
[solo que] 'veo' que se trata de -bastantes- mas columnas y una cuantas filas :))
[probablemente] habria que pensar en otro tipo de algoritmo que de mayor rapidez

si comentas los datos adicionales :)

saludos,
hector.

la adaptacion del codigo para tus -probablemente- autofiltros es: == Dim Celda As Range, Sig As Integer, _
May As Integer, Men As Integer, _
Bajar, Subir, Listado As New Collection, Elementos()
' aqui se cargan los elementos a la coleccion '
For Each Celda In Worksheets("interf").Cells(1, 7).Resize _
(Worksheets("interf").Cells(1, 7).CurrentRegion.Rows.Count - 1) _
.Offset(1).SpecialCells(xlCellTypeVisible)
On Error Resume Next
Listado.Add Celda, CStr(Celda)
Next
' aqui se pasan a una matriz para no afectar al rango de origen '
ReDim Elementos(Listado.Count)
For Sig = 0 To Listado.Count - 1
Elementos(Sig) = Listado(Sig + 1)
Next
' aqui se ordenan los elementos de la matriz en orden ascendente '
For Men = Sig = 0 To Listado.Count - 1
For May = Men + 1 To Listado.Count - 1
If Elementos(Men) > Elementos(May) Then
Bajar = Elementos(Men)
Subir = Elementos(May)
Elementos(Men) = Subir
Elementos(May) = Bajar
End If
Next
Next
' finalmente, se cargan los elementos ordenados al combo '
With UserForm2.ComboBox1
.Clear
For Sig = 0 To Listado.Count - 1
.AddItem Elementos(Sig)
Next
End With
Respuesta Responder a este mensaje
#10 cuejorge2003
25/10/2005 - 19:04 | Informe spam
Héctor,

Muchas gracias por tu apoyoesto funciona muy bien y rápido por
ejemplo en la columna 1 porque los datos únicos son solo 8. en el caso
de las demás columnas donde los datos unicos son mas de 300 es muy
lento, pero funciona perfectamente.

En caso que tuvieras una manera de hacerlo mas rápido sería muy
bueno, pero por lo que veo creo que lo mejor será solo ordenar los
datos de el combo1 y los demas dejarlos sin ordenar.

Muchísimas gracias por tu apoyo !!!

A todos los que contribuyen para que solucionemos problemas...
Muchísimas gracias.
De verdad, he platicado acerca de este foro y no me creen que puedan
saber tanto y ademas compartirlo.

Felicidades !!!! y de nuevo... Muchísimas gracias.
Un saludo afectuoso
Jorge Cué.




Héctor Miguel ha escrito:

hola, jorge !

> Me puedes, por favor, pasar la forma de hacerlo con burbuja o quicksort ?

la adaptacion del enlace que te sugiere Juan esta al final del presente ;)
[solo que] 'veo' que se trata de -bastantes- mas columnas y una cuantas filas :))
[probablemente] habria que pensar en otro tipo de algoritmo que de mayor rapidez

si comentas los datos adicionales :)

saludos,
hector.

la adaptacion del codigo para tus -probablemente- autofiltros es: ==> Dim Celda As Range, Sig As Integer, _
May As Integer, Men As Integer, _
Bajar, Subir, Listado As New Collection, Elementos()
' aqui se cargan los elementos a la coleccion '
For Each Celda In Worksheets("interf").Cells(1, 7).Resize _
(Worksheets("interf").Cells(1, 7).CurrentRegion.Rows.Count - 1) _
.Offset(1).SpecialCells(xlCellTypeVisible)
On Error Resume Next
Listado.Add Celda, CStr(Celda)
Next
' aqui se pasan a una matriz para no afectar al rango de origen '
ReDim Elementos(Listado.Count)
For Sig = 0 To Listado.Count - 1
Elementos(Sig) = Listado(Sig + 1)
Next
' aqui se ordenan los elementos de la matriz en orden ascendente '
For Men = Sig = 0 To Listado.Count - 1
For May = Men + 1 To Listado.Count - 1
If Elementos(Men) > Elementos(May) Then
Bajar = Elementos(Men)
Subir = Elementos(May)
Elementos(Men) = Subir
Elementos(May) = Bajar
End If
Next
Next
' finalmente, se cargan los elementos ordenados al combo '
With UserForm2.ComboBox1
.Clear
For Sig = 0 To Listado.Count - 1
.AddItem Elementos(Sig)
Next
End With
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida