Ordenar por dos criterios

Necesito que me ayuden a construir una macro que dependa de dos criterios,

Ordena primero de n.v,,,, luego de la A a la Z,,, sube o baja la información de toda la fila.

Yo lo elabore con la grabadora pero a veces no me funciona. Les dejo el código:

Sub actual()
Rows("7:67").Select
ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Add Key:=Range( _
"A7:A67"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="n,v" _
, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Add Key:=Range( _
"B7:B67"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort
.SetRange Range("A7:FA67")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Es `por eso que necesito que me ayuden a elaborarla mas profesionalmente, como ustedes lo saben hacer, generando el código personalmente.

1 respuesta

Respuesta
1

Me puedes responder las preguntas y en ese orden.

1. ¿Tus títulos están en la fila 7?

2. ¿Quieres qué se ordene por la columna A y también por la columna B?

3. ¿Sin importar el número de filas que tenga la hoja?

¿4 .Tus datos acaban en la columna FA?

5. ¿Tampoco importa el número de columnas y que seleccione todas las que existan?

Te mando una macro, suponiendo que tus títulos están en la fila 6

Sub Macro1()
'POR.dAM
    ufil = ActiveCell.SpecialCells(xlLastCell).Row
    ucol = ActiveCell.SpecialCells(xlLastCell).Column
    Range(Cells(6, 1), Cells(ufil, ucol)).Select
    ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Add _
        Key:=Range("A7:A" & ufil), _
        SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Add _
        Key:=Range("B7:B" & ufil), _
        SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort
        .SetRange Range(Cells(6, 1), Cells(ufil, ucol))
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Saludos.dam

gracias por atender mi pregunta..

te cuento que la estas en lo correcto, comienza en la celda 6 asi como la creaste lo único es qu el rango donde finaliza es de 7:67 ,, en la macro que creaste yo lo complete,, ordena n.v,, en la columna A, ordena a:z en la columna B ,, sube y baja la información...hasta allí excelente.

pero...

me manda los datos a la parte de abajo y luego si voy ingresando mas datos va subiendo,, por decirlo asi: ingreso dos datos normalmente, ejecuto la macro y me los manda a la fila 66 y 68....

porque hasta la 67,,, debajo de este parámetro de filas hay mas cuadros diferentes,, gracias.

Cambia esta línea en la macro

ufil = ActiveCell.SpecialCells(xlLastCell).Row

por esta

ufil = Range("a6").End(xlDown).Row

Saludos. Dam

te cuento que me sale un error 1004 en tiempo de ejecución y me marca en amarillo esta linea:

ucol = ActiveCell.SpecialCells(xlLastCell).Column

espero lo puedas resolver para finalizar.

Te mando la macro, a mí me funciona bien, cópiala toda y pégala nuevamente.

'***

Sub Macro1()
'POR.dAM
'ufil = ActiveCell.SpecialCells(xlLastCell).Row
ufil = Range("a6").End(xlDown).Row
ucol = ActiveCell.SpecialCells(xlLastCell).Column
Range(Cells(6, 1), Cells(ufil, ucol)).Select
ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Add _
Key:=Range("A7:A" & ufil), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort.SortFields.Add _
Key:=Range("B7:B" & ufil), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("INGRESO DE NOTAS").Sort
.SetRange Range(Cells(6, 1), Cells(ufil, ucol))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

'****

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas