Ordena automáticamente en forma personalizada






En este sitio web hay varios post que tratan sobre como ordenar datos ordenar datos por algún criterio y de esta manera contar con un cierto orden para poder trabajar con ellos, esta macro de Excel o procedimiento de VBA un poco sofisticada, lo que hace es determinar el rango a ordenar automáticamente luego de ello aplica un criterio de ordenación personal, este criterio se logra posicionándose en la celda sobre la cual se requiere la ordenación de datos.


Si estás viendo este ejemplo quizás te sirvan los presentados anteriormente como ordenar datos e insertar filas mediante macro de VBA, en ese ejemplo se insertan filas entre cada  registro de proveedor y se hace una suma totalizada por proveedor, a su vez se ordena por el criterio proveedor; un poco más avanzado es el ejemplo donde se ordena automáticamente pero en base a varios criterios, a su vez se ordena en forma descendente y no ascendente que es la forma por defecto; también se puede consultar userform para ordenar datos que tiene combobox que permite seleccionar el dato por el cual  ordenar, también se presentó una versión que ordena datos en base a varias columnas.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Como se adelantó, el ejemplo de macro o código de VBA denominado ordenar automáticamente en forma personalizada, funciona posicionándose en la celda por la cual se requiere ordenar los datos, una vez seleccionada la celda, la macro sola detecta el rango usado y luego ordena los datos por un criterio personalizado que se obtiene al posicionar el cursor sobre alguna celda que se requiera a los fines que se tenga en cuenta para ordenar

Los datos se ordenan en forma descendente y dependiendo del criterio personalizado.

Desde el link del final podrás bajar el archivo de ejemplo y adaptarlo a tus necesidades, existe un ejemplo presentado anteriormente que es un formulario que permite seleccionar el título de la columna por la cual ordenar, sugiero que observes su funcionamiento.

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo formulario que crea un listado de todas las hojas para poder luego seleccionarlasbuscar en listbox mientras escribes en textboxordenar hojas libro excel por su nombreconectar Excel con Access y muchos ejemplos más.






Código que se inserta en un módulo



Sub OrdenaCriterioPersonalizado()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim uc, wc, r, r1, b, mc, mc1, pf, uf As String
'determines last row with data
b = ActiveSheet.Name
mc = ActiveCell.Text
mc1 = ActiveCell.Address
pf = 2
uf = Sheets(b).Range("A" & Rows.Count).End(xlUp).Row
uc = Sheets(b).Cells(1, Columns.Count).End(xlToLeft).Address
pc = Sheets(b).Cells(1, Columns.Count).End(xlToLeft).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, "$") + 1, InStr(2, uc, "$") - 2)
wc1 = Mid(pc, InStr(pc, "$") + 1, InStr(2, pc, "$") - 2)
wc2 = Mid(mc1, InStr(mc1, "$") + 1, InStr(2, mc1, "$") - 2)
r = wc2 & pf & ":" & wc2 & uf
r1 = wc1 & pf & ":" & wc & uf
'sorts the data
 ActiveWorkbook.Worksheets(b).Sort.SortFields.Clear
 ActiveWorkbook.Worksheets(b).Sort.SortFields.Add Key:=Range(r) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:=(mc), DataOption:=xlSortNormal
 With ActiveWorkbook.Worksheets(b).Sort
        .SetRange Range(r1)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
 End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub





Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.



If this post was helpful 
INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends