Ordenar tabla con macro

Necesito una macro para ordenar una tabla.

Buscando he encontrado una macro que hace lo que necesito pero cuando intento adaptarla a mi hoja no me funciona.

Lo que pretendo es ordenar una tabla. Cada columna es un campo diferente. En una celda de control selecciono de una lista desplegable la columna por la que quiero ordenar y en otra celda de control elijo si quiero ordenar ascendente o descendente. Una vez ejecutada la macro las filas de la tabla se ordenan según la columna elegida en la celda de control y según el sentido (ascendente o descendente) elegido.

Adjunto la macro que he encontrado.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
RangoTotal = B6:H & UsedRange.Rows.Count
Letra = Array( B , C , D , E , F , G , H )
columna = H 
columna = Letra(Right(ActiveSheet.Range( H3 ), 1) - 1)
Rango = columna & 7: & columna & UsedRange.Rows.Count
If Target.Address = $H$3 Or Target.Address = $H$4 Then
 Range( B7:H62 ).Select
 ActiveWorkbook.Worksheets( Hoja1 ).Sort.SortFields.Clear
 If UCase(Left(Range( H4 ), 1)) = D Then
 ActiveWorkbook.Worksheets( Hoja1 ).Sort.SortFields.Add Key:=Range(Rango), _
 SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
 Else
 ActiveWorkbook.Worksheets( Hoja1 ).Sort.SortFields.Add Key:=Range(Rango), _
 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 End If
 With ActiveWorkbook.Worksheets( Hoja1 ).Sort
 .SetRange Range(RangoTotal)
 .Header = xlYes
 .MatchCase = False
 .Orientation = xlTopToBottom
 .SortMethod = xlPinYin
 .Apply
 End With
End If
ActiveSheet.Range(Rango).Select
End Sub

Sub Macro1()
'
' Macro1 Macro
'
'
 Range( B7:H62 ).Select
 ActiveWorkbook.Worksheets( Hoja1 ).Sort.SortFields.Clear
 ActiveWorkbook.Worksheets( Hoja1 ).Sort.SortFields.Add Key:=Range( E7:E62 ), _
 SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
 With ActiveWorkbook.Worksheets( Hoja1 ).Sort
 .SetRange Range( B6:H62 )
 .Header = xlYes
 .MatchCase = False
 .Orientation = xlTopToBottom
 .SortMethod = xlPinYin
 .Apply
 End With
End Sub

Estas son las macros que encontre y que no he sabido modificar. En el ejemplo se ordenaba una tabla B6:H67. En la celda H2 se elegia el nombre de la columna por la que se quiere ordenar y eb la celda H4 se elegia el sentido ascendente o descendente.

Yo pretende ordenar una tabla situada en una hoja que se llama FILTRO. La tabla ocupa las celdas A3:M50. La celda de control para elegir la columna por la que se ordena sera la B1 y la celda para elegir el orden la B2.

1 Respuesta

Respuesta
2

Esta sería tu solución. Sigue mis pasos:

-Tenemos la tabla ubicada en el rango A3:M50, donde la primera fila son los encabezados

-En la celda B1 montamos una validación de lista con todas la celdas de los encabezados

-En la celda B2 montamos una validación de lista con los siguientes textos: ascendente;descendente

Ahora podemos ejecutar esta macro y todo listo:

Sub ordenar()
criterio = Range("B1").Value
For Each celda In Range("a3:m3")
If celda.Value = criterio Then
k = celda.Address
End If
Next
If Range("B2").Value = "ascendente" Then
Range("a3").CurrentRegion.Select
Selection.Sort key1:=Range(k), order1:=xlAscending, Header:=xlYes, ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Else
Range("a3").CurrentRegion.Select
Selection.Sort key1:=Range(k), order1:=xlDescending, Header:=xlYes, ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End If
End Sub

RECUERDA FINALIZAR Y PUNTUAR

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas