Macro para ordenar un rango según un criterio

Tengo una planilla Excel con un rango definido (siempre es el mismo) y lo que quiero hacer es una macro que recorra la primera fila (por ejemplo a7:ab7) y sepa donde hay un 1 o una O de manera de poder ordenar este rango por esa columna de mayor a menor ...

1 respuesta

Respuesta
1
Mi pregunta sería:
Quieres ordenar la fila 7 desde A7 a la AB7, sin tener en cuenta nada más y que quede más a menos así
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Si puedes acláramelo mejor...
Te explico ... los datos están en un rango definido, no cambia ... por ejemplo a9:ab60.
en a8:ab8 estan los encabezados de cada campo (venta, margen, etc)
los datos que estan en a9:ab60 van cambiando de acuardo a ciertos criterios por lo tanto lo que quiero hacer es que si quiero ordenar por el campo H, poner un 1 o una x en h7 y que la macro tome el rango a9:ab60; recorra a7:ab7, sepa que en h7 hay una x y que esa es la columna por la cual debe ordenar ... se entiende mejor ahora ????? ...
Ok, dejame darle vueltas y cuando pueda (o sea tenga tiempo, posiblemente mañana por la mañana) lo hago.
Ya casi lo tengo, pero necesito un poco de tiempo y ahora me tengo que ir.
Prueba este código, que lo tines que poner en la hoja donde tengas la tabla, y otra cosa, selecciona todo la tabla A8:AB60 y ponle el nombre de ( mitabla ) sin los paréntesis.
Ten en cuenta que tienes que borrar las demás POR de la fila 7 para que no te confundas por la columna que has ordenado. Siempre te va a ordenar por la columna que marcas la POR, no tiene en cuenta si tienes marcada más POR, pero esto te puede llevar a confusión si quieres imprimir. Se me ocurre que podrías crear un botón que sea de ordenar de tal manera que te borre la fila 7 y te pida marcar de nuevo la POR y te ordene según ese criterio.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 7 And UCase(Target.Value) = "X" Then
Application.Goto Reference:="mitabla"
Selection.Sort Key1:=Range(Target.Address).Offset(1, 0), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End If
End Sub
Otra solución podría ser como te comentaba en post anterior, crear un botón que ejecute la macro, te borre la fila 7 y ordene según la selección de la columna. Para ello te envío este nuevo código, que tendrías que sustituir por el anterior.
Private Sub CommandButton1_Click()
Range("a7:AB7") = ""
Set myRango = Application.InputBox(prompt:="Selecciona la columna de criterio a ordenar", Type:=8)
Range("a7:ab7") = ""
Cells(7, myRango.Column) = "X"
Application.Goto Reference:="mitabla"
Selection.Sort Key1:=Cells(8, myRango.Column), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
' Recuerda si damos por terminada la prgunta, hay que cerrar y valorar.
'

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas