Macro ordenar un rango por varios criterios?

Necesito que alguien me ayude, por favor.

Mi trabajo me obliga a ordenar en Excel constantemente diferentes rangos en un mismo libro por diferentes criterios, actualmente lo hago de forma manual porque no he conseguido hacerlo de manera automática, por favor, ¿alguien me puede echar una mano?

4 Respuestas

Respuesta
2

Te dejo esta macro para 3 criterios, esta macro tiene la ventaja que es dinámica puede agregar o quitar filas o columnas e igual ordenara los registros que tengan

Sub ordenar()
Set tabla = Range("a7").CurrentRegion
With tabla
    .Sort _
    key1:=Range(.Columns(10).Address), order1:=xlAscending, _
    key2:=Range(.Columns(13).Address), order1:=xlAscending, _
    key3:=Range(.Columns(1).Address), order1:=xlAscending, Header:=False
End With
Set tabla = Nothing
End Sub
Respuesta
1

Esta macro ordena con 2 criterios, actualiza el rango de a partir de que celda empiezan sus datos, y hasta que celda finalizan sus datos y el nombre de la hoja, ojala pueda adaptarlo a sus datos. Cualquier cosa comenta.

Sub Ordenar1()
    Range("B6").Select
    UFilaI = Range("I" & Cells.Rows.Count).End(xlUp).Row
    UFilaD = Range("D" & Cells.Rows.Count).End(xlUp).Row
    UFilaE = Range("E" & Cells.Rows.Count).End(xlUp).Row
    Range("B6:I" & UFilaI).Select
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add2 Key:=Range("D6:D" & UFilaD), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add2 Key:=Range("E6:E" & UFilaE), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Hoja1").Sort
        .SetRange Range("B6:I" & UFilaI)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("B6").Select
End Sub

Muchísimas gracias!

Necesito 3 criterios, cómo tendría que escribirla???

Gracias de antemano.

Un saludo.

Puede compartir una copia de su archivo con datos ficticios y ahí mencionar que columnas prefiere que sean ordenadas para brindar una respuesta más concreta

Por supuesto!

Necesito ordenar primero J en orden descendente, luego M en orden ascendente y finalmente A en orden ascendente.
Gracias!

Intente con esta macro

Sub Ordenar()
    Range("A7").Select
    ufM = Range("M" & Cells.Rows.Count).End(xlUp).Row
    ufJ = Range("J" & Cells.Rows.Count).End(xlUp).Row
    ufA = Range("A" & Cells.Rows.Count).End(xlUp).Row
    Rango = Range("A7").CurrentRegion.Select
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add2 Key:=Range("J7:J" & ufJ), _
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add2 Key:=Range("M7:M" & ufM), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add2 Key:=Range("A7:A" & ufA), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Hoja1").Sort
        .SetRange Range("A7:M" & ufA)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A7").Select
End Sub

Actualiza el nombre de la hoja de su archivo, en la macro se llama Hoja1

Muchas gracias!

Perdona que te moleste de nuevo pero me lanza un error.

Cambie el nombre de la hoja, por Hoja33 en lugar de Mytaxi y me comenta si se soluciona

Lo he solucionado de esta manera:

Private Sub ORDENAR_Click()
    ActiveWorkbook.Worksheets("2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("2").Sort.SortFields.Add Key:=Range("K10:K500"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("2").Sort.SortFields.Add Key:=Range("M10:M500"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("2").Sort.SortFields.Add Key:=Range("B10:B500"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("2").Sort
        .SetRange Range("A10:M500")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub 

Así me funciona.

Muchísimas gracias por tu tiempo.

Espero que estés bien.

Un saludo.

Respuesta
1

No se si te servirá (dpde del nº de criterios que necesites), yo para 2 criterios utilice el método Sort(creo que admite hasta 3 criterios), no se si habrá algún otro que admita más criterios

XX..Sort key1:=Columns(1), order1:=xlAscending, key2:=Columns(5), order2:=xlAscending, Header:=xlYes
Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas